Add glMultiTexCoord2fARB
This commit is contained in:
parent
6942e597f4
commit
582a29d267
|
@ -15,19 +15,22 @@ static GLenum ACTIVE_POLYGON_MODE = GL_TRIANGLES;
|
||||||
|
|
||||||
static AlignedVector VERTICES;
|
static AlignedVector VERTICES;
|
||||||
static AlignedVector COLOURS;
|
static AlignedVector COLOURS;
|
||||||
static AlignedVector TEXCOORDS;
|
static AlignedVector UV_COORDS;
|
||||||
|
static AlignedVector ST_COORDS;
|
||||||
static AlignedVector NORMALS;
|
static AlignedVector NORMALS;
|
||||||
|
|
||||||
|
|
||||||
static GLfloat NORMAL[3] = {0.0f, 0.0f, 1.0f};
|
static GLfloat NORMAL[3] = {0.0f, 0.0f, 1.0f};
|
||||||
static GLfloat COLOR[4] = {1.0f, 1.0f, 1.0f, 1.0f};
|
static GLfloat COLOR[4] = {1.0f, 1.0f, 1.0f, 1.0f};
|
||||||
static GLfloat TEXCOORD[2] = {0.0f, 0.0f};
|
static GLfloat UV_COORD[2] = {0.0f, 0.0f};
|
||||||
|
static GLfloat ST_COORD[2] = {0.0f, 0.0f};
|
||||||
|
|
||||||
|
|
||||||
void initImmediateMode() {
|
void initImmediateMode() {
|
||||||
aligned_vector_init(&VERTICES, sizeof(GLfloat));
|
aligned_vector_init(&VERTICES, sizeof(GLfloat));
|
||||||
aligned_vector_init(&COLOURS, sizeof(GLfloat));
|
aligned_vector_init(&COLOURS, sizeof(GLfloat));
|
||||||
aligned_vector_init(&TEXCOORDS, sizeof(GLfloat));
|
aligned_vector_init(&UV_COORDS, sizeof(GLfloat));
|
||||||
|
aligned_vector_init(&ST_COORDS, sizeof(GLfloat));
|
||||||
aligned_vector_init(&NORMALS, sizeof(GLfloat));
|
aligned_vector_init(&NORMALS, sizeof(GLfloat));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,9 +91,10 @@ void APIENTRY glVertex3f(GLfloat x, GLfloat y, GLfloat z) {
|
||||||
aligned_vector_push_back(&VERTICES, &z, 1);
|
aligned_vector_push_back(&VERTICES, &z, 1);
|
||||||
|
|
||||||
|
|
||||||
/* Push back the stashed colour, normal and texcoord */
|
/* Push back the stashed colour, normal and uv_coordinate */
|
||||||
aligned_vector_push_back(&COLOURS, COLOR, 4);
|
aligned_vector_push_back(&COLOURS, COLOR, 4);
|
||||||
aligned_vector_push_back(&TEXCOORDS, TEXCOORD, 2);
|
aligned_vector_push_back(&UV_COORDS, UV_COORD, 2);
|
||||||
|
aligned_vector_push_back(&ST_COORDS, ST_COORD, 2);
|
||||||
aligned_vector_push_back(&NORMALS, NORMAL, 3);
|
aligned_vector_push_back(&NORMALS, NORMAL, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,9 +118,23 @@ void APIENTRY glVertex4fv(const GLfloat* v) {
|
||||||
glVertex4f(v[0], v[1], v[2], v[3]);
|
glVertex4f(v[0], v[1], v[2], v[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void APIENTRY glMultiTexCoord2fARB(GLenum target, GLfloat s, GLfloat t) {
|
||||||
|
if(target == GL_TEXTURE0) {
|
||||||
|
UV_COORD[0] = s;
|
||||||
|
UV_COORD[1] = t;
|
||||||
|
} else if(target == GL_TEXTURE1) {
|
||||||
|
ST_COORD[0] = s;
|
||||||
|
ST_COORD[1] = t;
|
||||||
|
} else {
|
||||||
|
_glKosThrowError(GL_INVALID_ENUM, __func__);
|
||||||
|
_glKosPrintError();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void APIENTRY glTexCoord2f(GLfloat u, GLfloat v) {
|
void APIENTRY glTexCoord2f(GLfloat u, GLfloat v) {
|
||||||
TEXCOORD[0] = u;
|
UV_COORD[0] = u;
|
||||||
TEXCOORD[1] = v;
|
UV_COORD[1] = v;
|
||||||
}
|
}
|
||||||
|
|
||||||
void APIENTRY glTexCoord2fv(const GLfloat* v) {
|
void APIENTRY glTexCoord2fv(const GLfloat* v) {
|
||||||
|
@ -148,13 +166,18 @@ void APIENTRY glEnd() {
|
||||||
|
|
||||||
glClientActiveTextureARB(GL_TEXTURE0);
|
glClientActiveTextureARB(GL_TEXTURE0);
|
||||||
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
|
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||||
glTexCoordPointer(2, GL_FLOAT, 0, TEXCOORDS.data);
|
glTexCoordPointer(2, GL_FLOAT, 0, UV_COORDS.data);
|
||||||
|
|
||||||
|
glClientActiveTextureARB(GL_TEXTURE1);
|
||||||
|
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||||
|
glTexCoordPointer(2, GL_FLOAT, 0, ST_COORDS.data);
|
||||||
|
|
||||||
glDrawArrays(ACTIVE_POLYGON_MODE, 0, VERTICES.size / 3);
|
glDrawArrays(ACTIVE_POLYGON_MODE, 0, VERTICES.size / 3);
|
||||||
|
|
||||||
aligned_vector_clear(&VERTICES);
|
aligned_vector_clear(&VERTICES);
|
||||||
aligned_vector_clear(&COLOURS);
|
aligned_vector_clear(&COLOURS);
|
||||||
aligned_vector_clear(&TEXCOORDS);
|
aligned_vector_clear(&UV_COORDS);
|
||||||
|
aligned_vector_clear(&ST_COORDS);
|
||||||
aligned_vector_clear(&NORMALS);
|
aligned_vector_clear(&NORMALS);
|
||||||
|
|
||||||
/* FIXME: Pop pointers */
|
/* FIXME: Pop pointers */
|
||||||
|
|
|
@ -636,9 +636,10 @@ GLAPI void APIENTRY glGetFloatv(GLenum pname, GLfloat *params);
|
||||||
GLAPI GLboolean APIENTRY glIsEnabled(GLenum cap);
|
GLAPI GLboolean APIENTRY glIsEnabled(GLenum cap);
|
||||||
GLAPI const GLbyte* APIENTRY glGetString(GLenum name);
|
GLAPI const GLbyte* APIENTRY glGetString(GLenum name);
|
||||||
|
|
||||||
/* Multi-Texture Extensions - Currently not supported in immediate mode */
|
/* Multitexture extensions */
|
||||||
GLAPI void APIENTRY glActiveTextureARB(GLenum texture);
|
GLAPI void APIENTRY glActiveTextureARB(GLenum texture);
|
||||||
GLAPI void APIENTRY glClientActiveTextureARB(GLenum texture);
|
GLAPI void APIENTRY glClientActiveTextureARB(GLenum texture);
|
||||||
|
GLAPI void APIENTRY glMultiTexCoord2fARB(GLenum target, GLfloat s, GLfloat t);
|
||||||
|
|
||||||
/* Error handling */
|
/* Error handling */
|
||||||
GLAPI GLenum APIENTRY glGetError(void);
|
GLAPI GLenum APIENTRY glGetError(void);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user