mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-14 18:15:28 -04:00
Make OpenGL 1.5/1.2+VBO backend almost work with 1.1 too, just slower
This commit is contained in:
parent
b9168ee255
commit
2dab8f427e
@ -1103,13 +1103,54 @@ void Gfx_DrawVb_IndexedTris(int verticesCount) {
|
||||
glDrawElements(GL_TRIANGLES, ICOUNT(verticesCount), GL_UNSIGNED_SHORT, IB_PTR);
|
||||
}
|
||||
|
||||
#ifndef CC_BUILD_GL11
|
||||
#ifdef CC_BUILD_GL11
|
||||
void Gfx_DrawIndexedTris_T2fC4b(int list, int ignored) { glCallList(list); }
|
||||
|
||||
static void GL_CheckSupport(void) { MakeIndices(gl_indices, GFX_MAX_INDICES); }
|
||||
#else
|
||||
void Gfx_DrawIndexedTris_T2fC4b(int verticesCount, int startVertex) {
|
||||
cc_uint32 offset = startVertex * SIZEOF_VERTEX_TEXTURED;
|
||||
glVertexPointer(3, GL_FLOAT, SIZEOF_VERTEX_TEXTURED, (void*)(offset));
|
||||
glColorPointer(4, GL_UNSIGNED_BYTE, SIZEOF_VERTEX_TEXTURED, (void*)(offset + 12));
|
||||
glTexCoordPointer(2, GL_FLOAT, SIZEOF_VERTEX_TEXTURED, (void*)(offset + 16));
|
||||
glDrawElements(GL_TRIANGLES, ICOUNT(verticesCount), GL_UNSIGNED_SHORT, NULL);
|
||||
glVertexPointer(3, GL_FLOAT, SIZEOF_VERTEX_TEXTURED, (void*)(VB_PTR + offset));
|
||||
glColorPointer(4, GL_UNSIGNED_BYTE, SIZEOF_VERTEX_TEXTURED, (void*)(VB_PTR + offset + 12));
|
||||
glTexCoordPointer(2, GL_FLOAT, SIZEOF_VERTEX_TEXTURED, (void*)(VB_PTR + offset + 16));
|
||||
glDrawElements(GL_TRIANGLES, ICOUNT(verticesCount), GL_UNSIGNED_SHORT, IB_PTR);
|
||||
}
|
||||
|
||||
|
||||
/*########################################################################################################################*
|
||||
*-------------------------------------------------------Compatibility-----------------------------------------------------*
|
||||
*#########################################################################################################################*/
|
||||
/* fake vertex buffer objects with client side pointers */
|
||||
typedef struct fake_buffer { cc_uint8* data; } fake_buffer;
|
||||
static fake_buffer* cur_ib;
|
||||
static fake_buffer* cur_vb;
|
||||
#define fake_GetBuffer(target) (target == _GL_ELEMENT_ARRAY_BUFFER ? &cur_ib : &cur_vb);
|
||||
|
||||
static void APIENTRY fake_glBindBuffer(GLenum target, GLuint src) {
|
||||
fake_buffer** buffer = fake_GetBuffer(target);
|
||||
*buffer = (fake_buffer*)src;
|
||||
}
|
||||
|
||||
static void APIENTRY fake_glDeleteBuffers(GLsizei n, const GLuint *buffers) {
|
||||
Mem_Free((void*)buffers[0]);
|
||||
}
|
||||
|
||||
static void APIENTRY fake_glGenBuffers(GLsizei n, GLuint *buffers) {
|
||||
fake_buffer* buffer = (fake_buffer*)Mem_TryAlloc(1, sizeof(fake_buffer));
|
||||
buffer->data = NULL;
|
||||
buffers[0] = (GLuint)buffer;
|
||||
}
|
||||
|
||||
static void APIENTRY fake_glBufferData(GLenum target, cc_uintptr size, const GLvoid* data, GLenum usage) {
|
||||
fake_buffer* buffer = *fake_GetBuffer(target);
|
||||
Mem_Free(buffer->data);
|
||||
|
||||
buffer->data = Mem_TryAlloc(size, 1);
|
||||
if (data) Mem_Copy(buffer->data, data, size);
|
||||
}
|
||||
static void APIENTRY fake_glBufferSubData(GLenum target, cc_uintptr offset, cc_uintptr size, const GLvoid* data) {
|
||||
fake_buffer* buffer = *fake_GetBuffer(target);
|
||||
Mem_Copy(buffer->data, data, size);
|
||||
}
|
||||
|
||||
static void GL_CheckSupport(void) {
|
||||
@ -1138,15 +1179,13 @@ static void GL_CheckSupport(void) {
|
||||
} else {
|
||||
Logger_Abort("Only OpenGL 1.1 supported.\n\n" \
|
||||
"Compile the game with CC_BUILD_GL11, or ask on the ClassiCube forums for it");
|
||||
|
||||
_glBindBuffer = fake_glBindBuffer; _glDeleteBuffers = fake_glDeleteBuffers;
|
||||
_glGenBuffers = fake_glGenBuffers; _glBufferData = fake_glBufferData;
|
||||
_glBufferSubData = fake_glBufferSubData;
|
||||
}
|
||||
customMipmapsLevels = true;
|
||||
}
|
||||
#else
|
||||
void Gfx_DrawIndexedTris_T2fC4b(int list, int ignored) { glCallList(list); }
|
||||
|
||||
static void GL_CheckSupport(void) {
|
||||
MakeIndices(gl_indices, GFX_MAX_INDICES);
|
||||
}
|
||||
#endif /* CC_BUILD_GL11 */
|
||||
#endif /* !CC_BUILD_GL11 */
|
||||
#endif /* !CC_BUILD_GLMODERN */
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user