From 3553fdf19d3e9dcba0013203250d0ba1ee90e9bd Mon Sep 17 00:00:00 2001 From: Hayden K <819028+mrneo240@users.noreply.github.com> Date: Sun, 3 Mar 2019 14:08:16 -0500 Subject: [PATCH] changes --- GL/config.h | 2 +- GL/draw.c | 6 +++--- GL/error.c | 1 + GL/flush.c | 13 +++++++++---- GL/framebuffer.c | 2 +- GL/matrix.c | 6 +++++- GL/private.h | 2 +- GL/profiler.h | 11 +++++++++++ GL/state.c | 11 +++++++---- GL/texture.c | 24 +++++++++++------------- containers/named_array.c | 21 +++++++++++++++------ 11 files changed, 65 insertions(+), 34 deletions(-) diff --git a/GL/config.h b/GL/config.h index b908a5a..5cd9d05 100644 --- a/GL/config.h +++ b/GL/config.h @@ -2,7 +2,7 @@ #define CONFIG_H -#define MAX_TEXTURE_COUNT 512 +#define MAX_TEXTURE_COUNT 512 //@Todo: or 1088 explain why increased. mrneo240 #endif // CONFIG_H diff --git a/GL/draw.c b/GL/draw.c index 3e6cec7..8a5a26e 100644 --- a/GL/draw.c +++ b/GL/draw.c @@ -1288,7 +1288,7 @@ void APIENTRY glEnableClientState(GLenum cap) { (ENABLED_VERTEX_ATTRIBUTES |= UV_ENABLED_FLAG); break; default: - _glKosThrowError(GL_INVALID_ENUM, "glEnableClientState"); + _glKosThrowError(GL_INVALID_ENUM, __func__); } } @@ -1311,7 +1311,7 @@ void APIENTRY glDisableClientState(GLenum cap) { (ENABLED_VERTEX_ATTRIBUTES &= ~UV_ENABLED_FLAG); break; default: - _glKosThrowError(GL_INVALID_ENUM, "glDisableClientState"); + _glKosThrowError(GL_INVALID_ENUM, __func__); } } @@ -1324,7 +1324,7 @@ void APIENTRY glClientActiveTextureARB(GLenum texture) { //TRACE(); if(texture < GL_TEXTURE0_ARB || texture > GL_TEXTURE0_ARB + MAX_TEXTURE_UNITS) { - _glKosThrowError(GL_INVALID_ENUM, "glClientActiveTextureARB"); + _glKosThrowError(GL_INVALID_ENUM, __func__); } if(_glKosHasError()) { diff --git a/GL/error.c b/GL/error.c index 459fa29..49732e5 100644 --- a/GL/error.c +++ b/GL/error.c @@ -57,6 +57,7 @@ void _glKosPrintError() { } fprintf(stderr, "GL ERROR: %s when calling %s\n", _glErrorEnumAsString(last_error), error_function); + _glKosResetError(); } GLenum glGetError(void) { diff --git a/GL/flush.c b/GL/flush.c index 1d53999..0afd625 100644 --- a/GL/flush.c +++ b/GL/flush.c @@ -94,24 +94,28 @@ void APIENTRY glKosSwapBuffers() { TRACE(); - profiler_push(__func__); + PROFILER_PUSH(__func__); pvr_wait_ready(); + pvr_scene_begin(); QACR0 = QACRTA; QACR1 = QACRTA; pvr_list_begin(PVR_LIST_OP_POLY); pvr_list_submit(OP_LIST.vector.data, OP_LIST.vector.size); + printf("OP_POLY: data: %p size:%d\n",OP_LIST.vector.data,OP_LIST.vector.size); pvr_list_finish(); pvr_list_begin(PVR_LIST_PT_POLY); pvr_list_submit(PT_LIST.vector.data, PT_LIST.vector.size); + printf("PT_POLY: data: %p size:%d\n",PT_LIST.vector.data,PT_LIST.vector.size); pvr_list_finish(); pvr_list_begin(PVR_LIST_TR_POLY); pvr_list_submit(TR_LIST.vector.data, TR_LIST.vector.size); + printf("TR_POLY: data: %p size:%d\n",TR_LIST.vector.data,TR_LIST.vector.size); pvr_list_finish(); pvr_scene_finish(); @@ -119,11 +123,12 @@ void APIENTRY glKosSwapBuffers() { aligned_vector_clear(&PT_LIST.vector); aligned_vector_clear(&TR_LIST.vector); - profiler_checkpoint("scene"); - profiler_pop(); - + PROFILER_CHECKPOINT("scene"); + PROFILER_POP(); + #ifdef PROFILER_COMPILE if(frame_count++ > 100) { profiler_print_stats(); frame_count = 0; } + #endif } diff --git a/GL/framebuffer.c b/GL/framebuffer.c index 1034c1a..d06d72f 100644 --- a/GL/framebuffer.c +++ b/GL/framebuffer.c @@ -186,7 +186,7 @@ GLboolean _glCalculateAverageTexel(const GLubyte* src, const GLuint srcWidth, co *d1 = (r << 11 | g << 5 | b); } else { fprintf(stderr, "ERROR: Unsupported PVR format for mipmap generation"); - _glKosThrowError(GL_INVALID_OPERATION, "glGenerateMipmapEXT"); + _glKosThrowError(GL_INVALID_OPERATION, __func__); _glKosPrintError(); return GL_FALSE; } diff --git a/GL/matrix.c b/GL/matrix.c index 85f0233..f70aac8 100644 --- a/GL/matrix.c +++ b/GL/matrix.c @@ -9,7 +9,7 @@ #define DEG2RAD (0.01745329251994329576923690768489) /* Viewport mapping */ -static GLfloat gl_viewport_scale[3], gl_viewport_offset[3]; +//static GLfloat gl_viewport_scale[3], gl_viewport_offset[3]; /* Depth range */ static GLclampf gl_depthrange_near, gl_depthrange_far; @@ -33,6 +33,10 @@ static const matrix_t IDENTITY = { void APIENTRY glDepthRange(GLclampf n, GLclampf f); +matrix_t* _glGetModelViewMatrix() { + return (matrix_t*) stack_top(&MATRIX_STACKS[0]); +} + matrix_t* _glGetProjectionMatrix() { return (matrix_t*) stack_top(&MATRIX_STACKS[1]); } diff --git a/GL/private.h b/GL/private.h index 9a738e8..8fb07b0 100644 --- a/GL/private.h +++ b/GL/private.h @@ -6,7 +6,7 @@ #include "../containers/named_array.h" #include "./clip.h" -#define TRACE_ENABLED 1 +#define TRACE_ENABLED 0 #define TRACE() if(TRACE_ENABLED) {fprintf(stderr, "%s\n", __func__);} #define VERTEX_ENABLED_FLAG (1 << 0) diff --git a/GL/profiler.h b/GL/profiler.h index acaf8bf..113130f 100644 --- a/GL/profiler.h +++ b/GL/profiler.h @@ -16,3 +16,14 @@ void profiler_print_stats(); void profiler_enable(); void profiler_disable(); + +#define PROFILER_COMPILE 0 +#ifdef PROFILER_COMPILE +#define PROFILER_PUSH(S) profiler_push(S) +#define PROFILER_CHECKPOINT(P) profiler_checkpoint(P) +#define PROFILER_POP() profiler_pop() +#else +#define PROFILER_PUSH(S) do {} while (0) +#define PROFILER_CHECKPOINT(P) do {} while (0) +#define PROFILER_POP() do {} while (0) +#endif diff --git a/GL/state.c b/GL/state.c index 5a38d78..0e5a2c8 100644 --- a/GL/state.c +++ b/GL/state.c @@ -135,8 +135,9 @@ GLboolean _glCheckValidEnum(GLint param, GLenum* values, const char* func) { } if(!found) { - _glKosThrowError(GL_INVALID_ENUM, func); - _glKosPrintError(); + //_glKosThrowError(GL_INVALID_ENUM, func); + //_glKosPrintError(); + printf("GL_INVALID_ENUM when calling %s\n",func); return GL_TRUE; } @@ -567,9 +568,11 @@ void APIENTRY glGetFloatv(GLenum pname, GLfloat* params) { switch(pname) { case GL_PROJECTION_MATRIX: memcpy(params, _glGetProjectionMatrix(), sizeof(float) * 16); + case GL_MODELVIEW_MATRIX: + memcpy(params, _glGetModelViewMatrix(), sizeof(float) * 16); break; default: - _glKosThrowError(GL_INVALID_ENUM, "glGetIntegerv"); + _glKosThrowError(GL_INVALID_ENUM, __func__); _glKosPrintError(); break; } @@ -611,7 +614,7 @@ void APIENTRY glGetIntegerv(GLenum pname, GLint *params) { } } break; default: - _glKosThrowError(GL_INVALID_ENUM, "glGetIntegerv"); + _glKosThrowError(GL_INVALID_ENUM, __func__); _glKosPrintError(); break; } diff --git a/GL/texture.c b/GL/texture.c index 9623053..3edbd02 100644 --- a/GL/texture.c +++ b/GL/texture.c @@ -55,7 +55,7 @@ void _glApplyColorTable() { GLushort i = 0; for(; i < src->width; ++i) { GLubyte* entry = &src->data[i * 4]; - pvr_set_pal_entry(i, PACK_ARGB8888(entry[3], entry[1], entry[2], entry[0])); + pvr_set_pal_entry(i, PACK_ARGB8888(entry[3], entry[0], entry[1], entry[2])); } } @@ -241,14 +241,13 @@ void APIENTRY glBindTexture(GLenum target, GLuint texture) { return; } - /* If this didn't come from glGenTextures, then we should initialize the - * texture the first time it's bound */ - if(!named_array_used(&TEXTURE_OBJECTS, texture)) { - TextureObject* txr = named_array_reserve(&TEXTURE_OBJECTS, texture); - _glInitializeTextureObject(txr, texture); - } - if(texture) { + /* If this didn't come from glGenTextures, then we should initialize the + * texture the first time it's bound */ + if(!named_array_used(&TEXTURE_OBJECTS, texture)) { + TextureObject* txr = named_array_reserve(&TEXTURE_OBJECTS, texture); + _glInitializeTextureObject(txr, texture); + } TEXTURE_UNITS[ACTIVE_TEXTURE] = (TextureObject*) named_array_get(&TEXTURE_OBJECTS, texture); } else { TEXTURE_UNITS[ACTIVE_TEXTURE] = NULL; @@ -264,9 +263,9 @@ void APIENTRY glTexEnvi(GLenum target, GLenum pname, GLint param) { GLubyte failures = 0; - failures += _glCheckValidEnum(target, target_values, __func__); + /*failures += _glCheckValidEnum(target, target_values, __func__); failures += _glCheckValidEnum(pname, pname_values, __func__); - failures += _glCheckValidEnum(param, param_values, __func__); + failures += _glCheckValidEnum(param, param_values, __func__);*/ TextureObject* active = TEXTURE_UNITS[ACTIVE_TEXTURE]; @@ -591,7 +590,6 @@ static inline void _i8_to_i8(const GLubyte* source, GLubyte* dest) { } static TextureConversionFunc _determineConversion(GLint internalFormat, GLenum format, GLenum type) { - printf("attempted conversion: %x -> %x, %x \n", internalFormat, format, type); switch(internalFormat) { case GL_ALPHA: { if(type == GL_UNSIGNED_BYTE && format == GL_RGBA) { @@ -690,8 +688,7 @@ void APIENTRY glTexImage2D(GLenum target, GLint level, GLint internalFormat, GLenum format, GLenum type, const GLvoid *data) { TRACE(); - printf("glTexImage2D(%x, %d, %x, %d, %d, %d ,%x, %x, *data) \n", target, level, internalFormat,width, height, border, format, type); - + if(target != GL_TEXTURE_2D) { _glKosThrowError(GL_INVALID_ENUM, "glTexImage2D-tex2d"); } @@ -870,6 +867,7 @@ void APIENTRY glTexImage2D(GLenum target, GLint level, GLint internalFormat, } } } + void APIENTRY glTexParameterf(GLenum target, GLenum pname, GLint param) { glTexParameteri(target, pname, (GLint)param); } diff --git a/containers/named_array.c b/containers/named_array.c index 3aac6b5..0214b43 100644 --- a/containers/named_array.c +++ b/containers/named_array.c @@ -12,6 +12,17 @@ #include "named_array.h" +#define BYTE_TO_BINARY_PATTERN "%c%c%c%c%c%c%c%c" +#define BYTE_TO_BINARY(byte) \ + (byte & 0x80 ? '1' : '0'), \ + (byte & 0x40 ? '1' : '0'), \ + (byte & 0x20 ? '1' : '0'), \ + (byte & 0x10 ? '1' : '0'), \ + (byte & 0x08 ? '1' : '0'), \ + (byte & 0x04 ? '1' : '0'), \ + (byte & 0x02 ? '1' : '0'), \ + (byte & 0x01 ? '1' : '0') + void named_array_init(NamedArray* array, unsigned int element_size, unsigned int max_elements) { array->element_size = element_size; array->max_element_count = max_elements; @@ -31,11 +42,10 @@ void named_array_init(NamedArray* array, unsigned int element_size, unsigned int } char named_array_used(NamedArray* array, unsigned int id) { - id--; - + unsigned int i = id / 8; unsigned int j = id % 8; - + unsigned char v = array->used_markers[i] & (unsigned char) (1 << j); return !!(v); } @@ -60,10 +70,9 @@ void* named_array_alloc(NamedArray* array, unsigned int* new_id) { void* named_array_reserve(NamedArray* array, unsigned int id) { if(!named_array_used(array, id)) { - unsigned int j = (id % 8) - 1; + unsigned int j = (id % 8); unsigned int i = id / 8; - - assert(!named_array_used(array, id)); + array->used_markers[i] |= (unsigned char) 1 << j; assert(named_array_used(array, id));