/*---------------------------------------------------------------------------*/
-static GLint max_tex_units;
-
static GLuint clip_text;
static GLubyte clip_data[] = { 0xff, 0xff, 0x0, 0x0 };
void clip_init(void)
{
- if (max_tex_units < 3)
+ if (gli.max_texture_units < 3)
return;
glActiveTexture_(GL_TEXTURE2);
void clip_draw_set(void)
{
- if (max_tex_units < 3)
+ if (gli.max_texture_units < 3)
return;
glActiveTexture_(GL_TEXTURE2);
void clip_draw_clr(void)
{
- if (max_tex_units < 3)
+ if (gli.max_texture_units < 3)
return;
glActiveTexture_(GL_TEXTURE2);
if (!config_get_d(CONFIG_SHADOW))
return;
- glGetIntegerv(GL_MAX_TEXTURE_UNITS, &max_tex_units);
-
- if (max_tex_units < 2)
+ if (gli.max_texture_units < 2)
{
config_set_d(CONFIG_SHADOW, 0);
return;
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, shad_text);
- if (max_tex_units < 3)
+ if (gli.max_texture_units < 3)
{
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
}
#include "glext.h"
+struct gl_info gli;
+
/*---------------------------------------------------------------------------*/
#if !ENABLE_OPENGLES
int glext_init(void)
{
-#if !ENABLE_OPENGLES
+ void *ptr = 0;
+
+ memset(&gli, 0, sizeof (struct gl_info));
- void *ptr;
+ /* Common init. */
+
+ gli.max_texture_units = 1;
+ glGetIntegerv(GL_MAX_TEXTURE_SIZE, &gli.max_texture_size);
+
+#if !ENABLE_OPENGLES
+ /* Desktop init. */
if (glext_assert("ARB_multitexture"))
{
+ glGetIntegerv(GL_MAX_TEXTURE_UNITS, &gli.max_texture_units);
+
SDL_GL_GFPA(glClientActiveTexture_, "glClientActiveTextureARB");
SDL_GL_GFPA(glActiveTexture_, "glActiveTextureARB");
+
+ gli.multitexture = 1;
}
- else
- return 0;
if (glext_assert("ARB_vertex_buffer_object"))
{
SDL_GL_GFPA(glBufferSubData_, "glBufferSubDataARB");
SDL_GL_GFPA(glDeleteBuffers_, "glDeleteBuffersARB");
SDL_GL_GFPA(glIsBuffer_, "glIsBufferARB");
+
+ gli.vertex_buffer_object = 1;
}
- else
- return 0;
if (glext_assert("ARB_point_parameters"))
+ {
SDL_GL_GFPA(glPointParameterfv_, "glPointParameterfvARB");
- else
- return 0;
- return 1;
+ gli.point_parameters = 1;
+ }
+ return (gli.multitexture &&
+ gli.vertex_buffer_object &&
+ gli.point_parameters);
#else
+ /* GLES init. */
- return 1;
+ glGetIntegerv(GL_MAX_TEXTURE_UNITS, &gli.max_texture_units);
+ gli.multitexture = 1;
+ gli.vertex_buffer_object = 1;
+ gli.point_parameters = 1;
+
+ return 1;
#endif
}
void glClipPlane4f_(GLenum, GLfloat, GLfloat, GLfloat, GLfloat);
/*---------------------------------------------------------------------------*/
+
+struct gl_info
+{
+ GLint max_texture_units;
+ GLint max_texture_size;
+
+ unsigned int multitexture:1;
+ unsigned int vertex_buffer_object:1;
+ unsigned int point_parameters:1;
+};
+
+extern struct gl_info gli;
+
+/*---------------------------------------------------------------------------*/
#endif
int W = w;
int H = h;
- GLint max;
+ GLint max = gli.max_texture_size;
void *q = NULL;
- glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max);
-
while (w / k > (int) max || h / k > (int) max)
k *= 2;