From 11b26c78d5b82647bbc01286d1f9745666033052 Mon Sep 17 00:00:00 2001 From: Luke Benstead Date: Thu, 28 Feb 2019 06:37:18 +0000 Subject: [PATCH 1/3] Fix an off-by-one error --- containers/named_array.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/containers/named_array.c b/containers/named_array.c index 4ae07bd..7cbd484 100644 --- a/containers/named_array.c +++ b/containers/named_array.c @@ -60,7 +60,7 @@ 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; + unsigned int j = (id % 8) - 1; unsigned int i = (id - j) / 8; assert(!named_array_used(array, id)); From 3345e17e3c522c2a1dec8a3161f74dac7211ece5 Mon Sep 17 00:00:00 2001 From: Luke Benstead Date: Thu, 28 Feb 2019 08:34:32 +0000 Subject: [PATCH 2/3] Fix marker indexing --- containers/named_array.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/containers/named_array.c b/containers/named_array.c index 7cbd484..3aac6b5 100644 --- a/containers/named_array.c +++ b/containers/named_array.c @@ -61,7 +61,7 @@ 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 i = (id - j) / 8; + unsigned int i = id / 8; assert(!named_array_used(array, id)); array->used_markers[i] |= (unsigned char) 1 << j; From 02937ccd2cb974bd1e96a8ebfa51a4d69d5082f1 Mon Sep 17 00:00:00 2001 From: Luke Benstead Date: Thu, 28 Feb 2019 08:46:13 +0000 Subject: [PATCH 3/3] Add stub with just GL_PROJECTION_MATRIX supported --- GL/matrix.c | 4 ++++ GL/private.h | 2 ++ GL/state.c | 12 ++++++++++++ 3 files changed, 18 insertions(+) diff --git a/GL/matrix.c b/GL/matrix.c index d4ce3ff..85f0233 100644 --- a/GL/matrix.c +++ b/GL/matrix.c @@ -33,6 +33,10 @@ static const matrix_t IDENTITY = { void APIENTRY glDepthRange(GLclampf n, GLclampf f); +matrix_t* _glGetProjectionMatrix() { + return (matrix_t*) stack_top(&MATRIX_STACKS[1]); +} + void initMatrices() { init_stack(&MATRIX_STACKS[0], sizeof(matrix_t), 32); init_stack(&MATRIX_STACKS[1], sizeof(matrix_t), 32); diff --git a/GL/private.h b/GL/private.h index c496e19..8fb07b0 100644 --- a/GL/private.h +++ b/GL/private.h @@ -108,6 +108,8 @@ void _matrixLoadModelView(); void _matrixLoadTexture(); void _applyRenderMatrix(); +matrix_t* _glGetProjectionMatrix(); + void wipeTextureOnFramebuffers(GLuint texture); GLubyte checkImmediateModeInactive(const char* func); diff --git a/GL/state.c b/GL/state.c index 96c0bf2..0fcfd81 100644 --- a/GL/state.c +++ b/GL/state.c @@ -563,6 +563,18 @@ void APIENTRY glGetBooleanv(GLenum pname, GLboolean* params) { } } +void APIENTRY glGetFloatv(GLenum pname, GLfloat* params) { + switch(pname) { + case GL_PROJECTION_MATRIX: + memcpy(params, _glGetProjectionMatrix(), sizeof(float) * 16); + break; + default: + _glKosThrowError(GL_INVALID_ENUM, "glGetIntegerv"); + _glKosPrintError(); + break; + } +} + void APIENTRY glGetIntegerv(GLenum pname, GLint *params) { switch(pname) { case GL_MAX_LIGHTS: