TINYGL: Eliminate passing context

This commit is contained in:
Paweł Kołodziejski 2021-12-07 09:54:19 +01:00
parent 8540da76a1
commit 4e34da3746
No known key found for this signature in database
GPG key ID: 0BDADC9E74440FF7
11 changed files with 103 additions and 102 deletions

View file

@ -35,7 +35,7 @@
namespace TinyGL { namespace TinyGL {
void GLContext::glopArrayElement(GLContext *c, GLParam *param) { void GLContext::glopArrayElement(GLParam *param) {
int offset; int offset;
int states = client_states; int states = client_states;
int idx = param[1].i; int idx = param[1].i;
@ -91,7 +91,7 @@ void GLContext::glopArrayElement(GLContext *c, GLParam *param) {
default: default:
assert(0); assert(0);
} }
glopColor(c, p); glopColor(p);
} }
if (states & NORMAL_ARRAY) { if (states & NORMAL_ARRAY) {
offset = idx * normal_array_stride; offset = idx * normal_array_stride;
@ -132,7 +132,7 @@ void GLContext::glopArrayElement(GLContext *c, GLParam *param) {
if (states & TEXCOORD_ARRAY) { if (states & TEXCOORD_ARRAY) {
int size = texcoord_array_size; int size = texcoord_array_size;
offset = idx * texcoord_array_stride; offset = idx * texcoord_array_stride;
switch (c->texcoord_array_type) { switch (texcoord_array_type) {
case TGL_FLOAT: { case TGL_FLOAT: {
TGLfloat *array = (TGLfloat *)((TGLbyte *)texcoord_array + offset); TGLfloat *array = (TGLfloat *)((TGLbyte *)texcoord_array + offset);
current_tex_coord.X = array[0]; current_tex_coord.X = array[0];
@ -209,24 +209,24 @@ void GLContext::glopArrayElement(GLContext *c, GLParam *param) {
default: default:
assert(0); assert(0);
} }
glopVertex(c, p); glopVertex(p);
} }
} }
void GLContext::glopDrawArrays(GLContext *c, GLParam *p) { void GLContext::glopDrawArrays(GLParam *p) {
GLParam array_element[2]; GLParam array_element[2];
GLParam begin[2]; GLParam begin[2];
begin[1].i = p[1].i; begin[1].i = p[1].i;
glopBegin(c, begin); glopBegin(begin);
for (int i = 0; i < p[3].i; i++) { for (int i = 0; i < p[3].i; i++) {
array_element[1].i = p[2].i + i; array_element[1].i = p[2].i + i;
glopArrayElement(c, array_element); glopArrayElement(array_element);
} }
glopEnd(c, NULL); glopEnd(nullptr);
} }
void GLContext::glopDrawElements(GLContext *c, GLParam *p) { void GLContext::glopDrawElements(GLParam *p) {
GLParam array_element[2]; GLParam array_element[2];
void *indices; void *indices;
GLParam begin[2]; GLParam begin[2];
@ -234,7 +234,7 @@ void GLContext::glopDrawElements(GLContext *c, GLParam *p) {
indices = (char *)p[4].p; indices = (char *)p[4].p;
begin[1].i = p[1].i; begin[1].i = p[1].i;
glopBegin(c, begin); glopBegin(begin);
for (int i = 0; i < p[2].i; i++) { for (int i = 0; i < p[2].i; i++) {
switch (p[3].i) { switch (p[3].i) {
case TGL_UNSIGNED_BYTE: case TGL_UNSIGNED_BYTE:
@ -250,20 +250,20 @@ void GLContext::glopDrawElements(GLContext *c, GLParam *p) {
assert(0); assert(0);
break; break;
} }
glopArrayElement(c, array_element); glopArrayElement(array_element);
} }
glopEnd(c, NULL); glopEnd(nullptr);
} }
void GLContext::glopEnableClientState(GLContext *c, GLParam *p) { void GLContext::glopEnableClientState(GLParam *p) {
client_states |= p[1].i; client_states |= p[1].i;
} }
void GLContext::glopDisableClientState(GLContext *c, GLParam *p) { void GLContext::glopDisableClientState(GLParam *p) {
client_states &= p[1].i; client_states &= p[1].i;
} }
void GLContext::glopVertexPointer(GLContext *c, GLParam *p) { void GLContext::glopVertexPointer(GLParam *p) {
vertex_array_size = p[1].i; vertex_array_size = p[1].i;
vertex_array_type = p[2].i; vertex_array_type = p[2].i;
vertex_array = p[4].p; vertex_array = p[4].p;
@ -286,7 +286,7 @@ void GLContext::glopVertexPointer(GLContext *c, GLParam *p) {
} }
} }
void GLContext::glopColorPointer(GLContext *c, GLParam *p) { void GLContext::glopColorPointer(GLParam *p) {
color_array_size = p[1].i; color_array_size = p[1].i;
color_array_type = p[2].i; color_array_type = p[2].i;
color_array = p[4].p; color_array = p[4].p;
@ -315,7 +315,7 @@ void GLContext::glopColorPointer(GLContext *c, GLParam *p) {
} }
} }
void GLContext::glopNormalPointer(GLContext *c, GLParam *p) { void GLContext::glopNormalPointer(GLParam *p) {
normal_array_type = p[1].i; normal_array_type = p[1].i;
normal_array = p[3].p; normal_array = p[3].p;
switch (p[1].i) { switch (p[1].i) {
@ -337,7 +337,7 @@ void GLContext::glopNormalPointer(GLContext *c, GLParam *p) {
} }
} }
void GLContext::glopTexCoordPointer(GLContext *c, GLParam *p) { void GLContext::glopTexCoordPointer(GLParam *p) {
texcoord_array_size = p[1].i; texcoord_array_size = p[1].i;
texcoord_array_type = p[2].i; texcoord_array_type = p[2].i;
texcoord_array = p[4].p; texcoord_array = p[4].p;

View file

@ -31,15 +31,15 @@
namespace TinyGL { namespace TinyGL {
void GLContext::glopClearColor(GLContext *c, GLParam *p) { void GLContext::glopClearColor(GLParam *p) {
clear_color = Vector4(p[1].f, p[2].f, p[3].f, p[4].f); clear_color = Vector4(p[1].f, p[2].f, p[3].f, p[4].f);
} }
void GLContext::glopClearDepth(GLContext *c, GLParam *p) { void GLContext::glopClearDepth(GLParam *p) {
clear_depth = p[1].f; clear_depth = p[1].f;
} }
void GLContext::glopClear(GLContext *c, GLParam *p) { void GLContext::glopClear(GLParam *p) {
int mask = p[1].i; int mask = p[1].i;
int z = (int)(clear_depth * ((1 << ZB_Z_BITS) - 1)); int z = (int)(clear_depth * ((1 << ZB_Z_BITS) - 1));
int r = (int)(clear_color.X * 255); int r = (int)(clear_color.X * 255);

View file

@ -30,7 +30,7 @@
namespace TinyGL { namespace TinyGL {
void GLContext::glopMaterial(GLContext *c, GLParam *p) { void GLContext::glopMaterial(GLParam *p) {
int mode = p[1].i; int mode = p[1].i;
int type = p[2].i; int type = p[2].i;
Vector4 v(p[3].f, p[4].f, p[5].f, p[6].f); Vector4 v(p[3].f, p[4].f, p[5].f, p[6].f);
@ -38,7 +38,7 @@ void GLContext::glopMaterial(GLContext *c, GLParam *p) {
if (mode == TGL_FRONT_AND_BACK) { if (mode == TGL_FRONT_AND_BACK) {
p[1].i = TGL_FRONT; p[1].i = TGL_FRONT;
glopMaterial(c, p); glopMaterial(p);
mode = TGL_BACK; mode = TGL_BACK;
} }
if (mode == TGL_FRONT) if (mode == TGL_FRONT)
@ -73,7 +73,7 @@ void GLContext::glopMaterial(GLContext *c, GLParam *p) {
} }
} }
void GLContext::glopColorMaterial(GLContext *c, GLParam *p) { void GLContext::glopColorMaterial(GLParam *p) {
int mode = p[1].i; int mode = p[1].i;
int type = p[2].i; int type = p[2].i;
@ -81,7 +81,7 @@ void GLContext::glopColorMaterial(GLContext *c, GLParam *p) {
current_color_material_type = type; current_color_material_type = type;
} }
void GLContext::glopLight(GLContext *c, GLParam *p) { void GLContext::glopLight(GLParam *p) {
int light = p[1].i; int light = p[1].i;
int type = p[2].i; int type = p[2].i;
Vector4 v(p[3].f, p[4].f, p[5].f, p[6].f); Vector4 v(p[3].f, p[4].f, p[5].f, p[6].f);
@ -104,7 +104,7 @@ void GLContext::glopLight(GLContext *c, GLParam *p) {
break; break;
case TGL_POSITION: { case TGL_POSITION: {
Vector4 pos; Vector4 pos;
c->matrix_stack_ptr[0]->transform(v, pos); matrix_stack_ptr[0]->transform(v, pos);
l->position = pos; l->position = pos;
@ -148,7 +148,7 @@ void GLContext::glopLight(GLContext *c, GLParam *p) {
} }
} }
void GLContext::glopLightModel(GLContext *c, GLParam *p) { void GLContext::glopLightModel(GLParam *p) {
int pname = p[1].i; int pname = p[1].i;
switch (pname) { switch (pname) {

View file

@ -38,7 +38,7 @@ namespace TinyGL {
#define ADD_OP(aa, bb, ff) \ #define ADD_OP(aa, bb, ff) \
static void glop ## aa (GLContext *c, GLParam *p) \ static void glop ## aa (GLContext *c, GLParam *p) \
{ \ { \
c->glop ## aa (c, p); \ c->glop ## aa (p); \
} }
#include "graphics/tinygl/opinfo.h" #include "graphics/tinygl/opinfo.h"
@ -176,21 +176,21 @@ void GLContext::gl_add_op(GLParam *p) {
} }
// this opcode is never called directly // this opcode is never called directly
void GLContext::glopEndList(GLContext *, GLParam *) { void GLContext::glopEndList(GLParam *) {
assert(0); assert(0);
} }
// this opcode is never called directly // this opcode is never called directly
void GLContext::glopNextBuffer(GLContext *, GLParam *) { void GLContext::glopNextBuffer(GLParam *) {
assert(0); assert(0);
} }
void GLContext::glopCallList(GLContext *c, GLParam *p) { void GLContext::glopCallList(GLParam *p) {
GLList *l; GLList *l;
int list, op; int list, op;
list = p[1].ui; list = p[1].ui;
l = find_list(c, list); l = find_list(this, list);
if (!l) if (!l)
error("list %d not defined", list); error("list %d not defined", list);
p = l->first_op_buffer->ops; p = l->first_op_buffer->ops;
@ -202,7 +202,7 @@ void GLContext::glopCallList(GLContext *c, GLParam *p) {
if (op == OP_NextBuffer) { if (op == OP_NextBuffer) {
p = (GLParam *)p[1].p; p = (GLParam *)p[1].p;
} else { } else {
op_table_func[op](c, p); op_table_func[op](this, p);
p += op_table_size[op]; p += op_table_size[op];
} }
} }

View file

@ -43,7 +43,7 @@ static inline void gl_matrix_update(GLContext *c) {
c->matrix_model_projection_updated |= (c->matrix_mode <= 1); c->matrix_model_projection_updated |= (c->matrix_mode <= 1);
} }
void GLContext::glopMatrixMode(GLContext *c, GLParam *p) { void GLContext::glopMatrixMode(GLParam *p) {
int mode = p[1].i; int mode = p[1].i;
switch (mode) { switch (mode) {
case TGL_MODELVIEW: case TGL_MODELVIEW:
@ -60,11 +60,11 @@ void GLContext::glopMatrixMode(GLContext *c, GLParam *p) {
} }
} }
void GLContext::glopLoadMatrix(GLContext *c, GLParam *p) { void GLContext::glopLoadMatrix(GLParam *p) {
Matrix4 *m; Matrix4 *m;
GLParam *q; GLParam *q;
m = matrix_stack_ptr[c->matrix_mode]; m = matrix_stack_ptr[matrix_mode];
q = p + 1; q = p + 1;
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
@ -75,15 +75,15 @@ void GLContext::glopLoadMatrix(GLContext *c, GLParam *p) {
q += 4; q += 4;
} }
gl_matrix_update(c); gl_matrix_update(this);
} }
void GLContext::glopLoadIdentity(GLContext *c, GLParam *) { void GLContext::glopLoadIdentity(GLParam *) {
matrix_stack_ptr[matrix_mode]->identity(); matrix_stack_ptr[matrix_mode]->identity();
gl_matrix_update(c); gl_matrix_update(this);
} }
void GLContext::glopMultMatrix(GLContext *c, GLParam *p) { void GLContext::glopMultMatrix(GLParam *p) {
Matrix4 m; Matrix4 m;
GLParam *q; GLParam *q;
q = p + 1; q = p + 1;
@ -98,11 +98,11 @@ void GLContext::glopMultMatrix(GLContext *c, GLParam *p) {
*matrix_stack_ptr[matrix_mode] *= m; *matrix_stack_ptr[matrix_mode] *= m;
gl_matrix_update(c); gl_matrix_update(this);
} }
void GLContext::glopPushMatrix(GLContext *c, GLParam *) { void GLContext::glopPushMatrix(GLParam *) {
int n = matrix_mode; int n = matrix_mode;
Matrix4 *m; Matrix4 *m;
@ -112,18 +112,18 @@ void GLContext::glopPushMatrix(GLContext *c, GLParam *) {
m[0] = m[-1]; m[0] = m[-1];
gl_matrix_update(c); gl_matrix_update(this);
} }
void GLContext::glopPopMatrix(GLContext *c, GLParam *) { void GLContext::glopPopMatrix(GLParam *) {
int n = matrix_mode; int n = matrix_mode;
assert(matrix_stack_ptr[n] > matrix_stack[n]); assert(matrix_stack_ptr[n] > matrix_stack[n]);
matrix_stack_ptr[n]--; matrix_stack_ptr[n]--;
gl_matrix_update(c); gl_matrix_update(this);
} }
void GLContext::glopRotate(GLContext *c, GLParam *p) { void GLContext::glopRotate(GLParam *p) {
Matrix4 m; Matrix4 m;
float u[3]; float u[3];
float angle; float angle;
@ -192,20 +192,20 @@ void GLContext::glopRotate(GLContext *c, GLParam *p) {
*matrix_stack_ptr[matrix_mode] *= m; *matrix_stack_ptr[matrix_mode] *= m;
gl_matrix_update(c); gl_matrix_update(this);
} }
void GLContext::glopScale(GLContext *c, GLParam *p) { void GLContext::glopScale(GLParam *p) {
matrix_stack_ptr[matrix_mode]->scale(p[1].f, p[2].f, p[3].f); matrix_stack_ptr[matrix_mode]->scale(p[1].f, p[2].f, p[3].f);
gl_matrix_update(c); gl_matrix_update(this);
} }
void GLContext::glopTranslate(GLContext *c, GLParam *p) { void GLContext::glopTranslate(GLParam *p) {
matrix_stack_ptr[matrix_mode]->translate(p[1].f, p[2].f, p[3].f); matrix_stack_ptr[matrix_mode]->translate(p[1].f, p[2].f, p[3].f);
gl_matrix_update(c); gl_matrix_update(this);
} }
void GLContext::glopFrustum(GLContext *c, GLParam *p) { void GLContext::glopFrustum(GLParam *p) {
float left = p[1].f; float left = p[1].f;
float right = p[2].f; float right = p[2].f;
float bottom = p[3].f; float bottom = p[3].f;
@ -216,10 +216,10 @@ void GLContext::glopFrustum(GLContext *c, GLParam *p) {
*matrix_stack_ptr[matrix_mode] *= m; *matrix_stack_ptr[matrix_mode] *= m;
gl_matrix_update(c); gl_matrix_update(this);
} }
void GLContext::glopOrtho(GLContext *context, GLParam *p) { void GLContext::glopOrtho(GLParam *p) {
float *r; float *r;
TinyGL::Matrix4 m; TinyGL::Matrix4 m;
float left = p[1].f; float left = p[1].f;
@ -243,8 +243,8 @@ void GLContext::glopOrtho(GLContext *context, GLParam *p) {
r[8] = 0; r[9] = 0; r[10] = c; r[11] = tz; r[8] = 0; r[9] = 0; r[10] = c; r[11] = tz;
r[12] = 0; r[13] = 0; r[14] = 0; r[15] = 1; r[12] = 0; r[13] = 0; r[14] = 0; r[15] = 1;
*context->matrix_stack_ptr[context->matrix_mode] *= m; *matrix_stack_ptr[matrix_mode] *= m;
gl_matrix_update(context); gl_matrix_update(this);
} }
} // end of namespace TinyGL } // end of namespace TinyGL

View file

@ -30,7 +30,7 @@
namespace TinyGL { namespace TinyGL {
void GLContext::glopViewport(GLContext *c, GLParam *p) { void GLContext::glopViewport(GLParam *p) {
int xsize, ysize, xmin, ymin, xsize_req, ysize_req; int xsize, ysize, xmin, ymin, xsize_req, ysize_req;
xmin = p[1].i; xmin = p[1].i;
@ -46,7 +46,7 @@ void GLContext::glopViewport(GLContext *c, GLParam *p) {
xsize_req = xmin + xsize; xsize_req = xmin + xsize;
ysize_req = ymin + ysize; ysize_req = ymin + ysize;
if (gl_resize_viewport && gl_resize_viewport(c, &xsize_req, &ysize_req) != 0) { if (gl_resize_viewport && gl_resize_viewport(&xsize_req, &ysize_req) != 0) {
error("glViewport: error while resizing display"); error("glViewport: error while resizing display");
} }
@ -65,7 +65,7 @@ void GLContext::glopViewport(GLContext *c, GLParam *p) {
} }
} }
void GLContext::glopEnableDisable(GLContext *c, GLParam *p) { void GLContext::glopEnableDisable(GLParam *p) {
int code = p[1].i; int code = p[1].i;
int v = p[2].i; int v = p[2].i;
@ -135,39 +135,39 @@ void GLContext::glopEnableDisable(GLContext *c, GLParam *p) {
} }
} }
void GLContext::glopBlendFunc(GLContext *c, GLParam *p) { void GLContext::glopBlendFunc(GLParam *p) {
TGLenum sfactor = p[1].i; TGLenum sfactor = p[1].i;
TGLenum dfactor = p[2].i; TGLenum dfactor = p[2].i;
fb->setBlendingFactors(sfactor, dfactor); fb->setBlendingFactors(sfactor, dfactor);
} }
void GLContext::glopAlphaFunc(GLContext *c, GLParam *p) { void GLContext::glopAlphaFunc(GLParam *p) {
TGLenum func = p[1].i; TGLenum func = p[1].i;
float ref = p[2].f; float ref = p[2].f;
fb->setAlphaTestFunc(func, (int)(ref * 255)); fb->setAlphaTestFunc(func, (int)(ref * 255));
} }
void GLContext::glopDepthFunc(GLContext *c, GLParam *p) { void GLContext::glopDepthFunc(GLParam *p) {
TGLenum func = p[1].i; TGLenum func = p[1].i;
fb->setDepthFunc(func); fb->setDepthFunc(func);
} }
void GLContext::glopShadeModel(GLContext *c, GLParam *p) { void GLContext::glopShadeModel(GLParam *p) {
int code = p[1].i; int code = p[1].i;
current_shade_model = code; current_shade_model = code;
} }
void GLContext::glopCullFace(GLContext *c, GLParam *p) { void GLContext::glopCullFace(GLParam *p) {
int code = p[1].i; int code = p[1].i;
current_cull_face = code; current_cull_face = code;
} }
void GLContext::glopFrontFace(GLContext *c, GLParam *p) { void GLContext::glopFrontFace(GLParam *p) {
int code = p[1].i; int code = p[1].i;
current_front_face = code; current_front_face = code;
} }
void GLContext::glopPolygonMode(GLContext *c, GLParam *p) { void GLContext::glopPolygonMode(GLParam *p) {
int face = p[1].i; int face = p[1].i;
int mode = p[2].i; int mode = p[2].i;
@ -187,20 +187,20 @@ void GLContext::glopPolygonMode(GLContext *c, GLParam *p) {
} }
} }
void GLContext::glopHint(GLContext *, GLParam *) { void GLContext::glopHint(GLParam *) {
// do nothing // do nothing
} }
void GLContext::glopPolygonOffset(GLContext *c, GLParam *p) { void GLContext::glopPolygonOffset(GLParam *p) {
offset_factor = p[1].f; offset_factor = p[1].f;
offset_units = p[2].f; offset_units = p[2].f;
} }
void GLContext::glopColorMask(GLContext *c, TinyGL::GLParam *p) { void GLContext::glopColorMask(GLParam *p) {
color_mask = p[1].i; color_mask = p[1].i;
} }
void GLContext::glopDepthMask(GLContext *c, TinyGL::GLParam *p) { void GLContext::glopDepthMask(TinyGL::GLParam *p) {
fb->enableDepthWrite(p[1].i); fb->enableDepthWrite(p[1].i);
} }

View file

@ -77,22 +77,22 @@ void tglSelectBuffer(int size, unsigned int *buf) {
c->select_size = size; c->select_size = size;
} }
void GLContext::glopInitNames(GLContext *c, GLParam *) { void GLContext::glopInitNames(GLParam *) {
if (render_mode == TGL_SELECT) { if (render_mode == TGL_SELECT) {
name_stack_size = 0; name_stack_size = 0;
select_hit = NULL; select_hit = NULL;
} }
} }
void GLContext::glopPushName(GLContext *c, GLParam *p) { void GLContext::glopPushName(GLParam *p) {
if (c->render_mode == TGL_SELECT) { if (render_mode == TGL_SELECT) {
assert(c->name_stack_size < MAX_NAME_STACK_DEPTH); assert(name_stack_size < MAX_NAME_STACK_DEPTH);
name_stack[c->name_stack_size++] = p[1].i; name_stack[name_stack_size++] = p[1].i;
select_hit = NULL; select_hit = NULL;
} }
} }
void GLContext::glopPopName(GLContext *c, GLParam *) { void GLContext::glopPopName(GLParam *) {
if (render_mode == TGL_SELECT) { if (render_mode == TGL_SELECT) {
assert(name_stack_size > 0); assert(name_stack_size > 0);
name_stack_size--; name_stack_size--;
@ -100,7 +100,7 @@ void GLContext::glopPopName(GLContext *c, GLParam *) {
} }
} }
void GLContext::glopLoadName(GLContext *c, GLParam *p) { void GLContext::glopLoadName(GLParam *p) {
if (render_mode == TGL_SELECT) { if (render_mode == TGL_SELECT) {
assert(name_stack_size > 0); assert(name_stack_size > 0);
name_stack[name_stack_size - 1] = p[1].i; name_stack[name_stack_size - 1] = p[1].i;

View file

@ -112,21 +112,21 @@ void GLContext::glInitTextures() {
colorAssociationList.push_back({Graphics::PixelFormat(2, 4, 4, 4, 4, 12, 8, 4, 0), TGL_RGBA, TGL_UNSIGNED_SHORT_4_4_4_4}); colorAssociationList.push_back({Graphics::PixelFormat(2, 4, 4, 4, 4, 12, 8, 4, 0), TGL_RGBA, TGL_UNSIGNED_SHORT_4_4_4_4});
} }
void GLContext::glopBindTexture(GLContext *c, GLParam *p) { void GLContext::glopBindTexture(GLParam *p) {
int target = p[1].i; int target = p[1].i;
int texture = p[2].i; int texture = p[2].i;
GLTexture *t; GLTexture *t;
assert(target == TGL_TEXTURE_2D && texture >= 0); assert(target == TGL_TEXTURE_2D && texture >= 0);
t = find_texture(c, texture); t = find_texture(this, texture);
if (!t) { if (!t) {
t = alloc_texture(texture); t = alloc_texture(texture);
} }
current_texture = t; current_texture = t;
} }
void GLContext::glopTexImage2D(GLContext *c, GLParam *p) { void GLContext::glopTexImage2D(GLParam *p) {
int target = p[1].i; int target = p[1].i;
int level = p[2].i; int level = p[2].i;
int internalformat = p[3].i; int internalformat = p[3].i;
@ -214,7 +214,7 @@ void GLContext::glopTexImage2D(GLContext *c, GLParam *p) {
} }
// TODO: not all tests are done // TODO: not all tests are done
void GLContext::glopTexEnv(GLContext *, GLParam *p) { void GLContext::glopTexEnv(GLParam *p) {
int target = p[1].i; int target = p[1].i;
int pname = p[2].i; int pname = p[2].i;
int param = p[3].i; int param = p[3].i;
@ -232,7 +232,7 @@ error:
} }
// TODO: not all tests are done // TODO: not all tests are done
void GLContext::glopTexParameter(GLContext *c, GLParam *p) { void GLContext::glopTexParameter(GLParam *p) {
int target = p[1].i; int target = p[1].i;
int pname = p[2].i; int pname = p[2].i;
int param = p[3].i; int param = p[3].i;
@ -278,7 +278,7 @@ error:
} }
} }
void GLContext::glopPixelStore(GLContext *, GLParam *p) { void GLContext::glopPixelStore(GLParam *p) {
int pname = p[1].i; int pname = p[1].i;
int param = p[2].i; int param = p[2].i;

View file

@ -31,25 +31,25 @@
namespace TinyGL { namespace TinyGL {
void GLContext::glopNormal(GLContext *c, GLParam *p) { void GLContext::glopNormal(GLParam *p) {
current_normal.X = p[1].f; current_normal.X = p[1].f;
current_normal.Y = p[2].f; current_normal.Y = p[2].f;
current_normal.Z = p[3].f; current_normal.Z = p[3].f;
current_normal.W = 0.0f; current_normal.W = 0.0f;
} }
void GLContext::glopTexCoord(GLContext *c, GLParam *p) { void GLContext::glopTexCoord(GLParam *p) {
current_tex_coord.X = p[1].f; current_tex_coord.X = p[1].f;
current_tex_coord.Y = p[2].f; current_tex_coord.Y = p[2].f;
current_tex_coord.Z = p[3].f; current_tex_coord.Z = p[3].f;
current_tex_coord.W = p[4].f; current_tex_coord.W = p[4].f;
} }
void GLContext::glopEdgeFlag(GLContext *c, GLParam *p) { void GLContext::glopEdgeFlag(GLParam *p) {
current_edge_flag = p[1].i; current_edge_flag = p[1].i;
} }
void GLContext::glopColor(GLContext *c, GLParam *p) { void GLContext::glopColor(GLParam *p) {
current_color.X = p[1].f; current_color.X = p[1].f;
current_color.Y = p[2].f; current_color.Y = p[2].f;
current_color.Z = p[3].f; current_color.Z = p[3].f;
@ -64,18 +64,18 @@ void GLContext::glopColor(GLContext *c, GLParam *p) {
q[4].f = p[2].f; q[4].f = p[2].f;
q[5].f = p[3].f; q[5].f = p[3].f;
q[6].f = p[4].f; q[6].f = p[4].f;
glopMaterial(c, q); glopMaterial(q);
} }
} }
static void gl_eval_viewport(GLContext *c) { void GLContext::gl_eval_viewport() {
GLViewport *v; GLViewport *v;
float zsize = (1 << (ZB_Z_BITS + ZB_POINT_Z_FRAC_BITS)); float zsize = (1 << (ZB_Z_BITS + ZB_POINT_Z_FRAC_BITS));
v = &c->viewport; v = &viewport;
// v->ymin needs to be upside down for transformation // v->ymin needs to be upside down for transformation
int ymin = c->fb->ysize - v->ysize - v->ymin; int ymin = fb->ysize - v->ysize - v->ymin;
v->trans.X = (float)(((v->xsize - 0.5) / 2.0) + v->xmin); v->trans.X = (float)(((v->xsize - 0.5) / 2.0) + v->xmin);
v->trans.Y = (float)(((v->ysize - 0.5) / 2.0) + ymin); v->trans.Y = (float)(((v->ysize - 0.5) / 2.0) + ymin);
v->trans.Z = (float)(((zsize - 0.5) / 2.0) + ((1 << ZB_POINT_Z_FRAC_BITS)) / 2); v->trans.Z = (float)(((zsize - 0.5) / 2.0) + ((1 << ZB_POINT_Z_FRAC_BITS)) / 2);
@ -86,10 +86,10 @@ static void gl_eval_viewport(GLContext *c) {
v->scale.Z = (float)(-((zsize - 0.5) / 2.0)); v->scale.Z = (float)(-((zsize - 0.5) / 2.0));
} }
void GLContext::glopBegin(GLContext *c, GLParam *p) { void GLContext::glopBegin(GLParam *p) {
int type; int type;
assert(c->in_begin == 0); assert(in_begin == 0);
type = p[1].i; type = p[1].i;
begin_type = type; begin_type = type;
@ -119,7 +119,7 @@ void GLContext::glopBegin(GLContext *c, GLParam *p) {
// viewport // viewport
if (viewport.updated) { if (viewport.updated) {
gl_eval_viewport(c); gl_eval_viewport();
viewport.updated = 0; viewport.updated = 0;
} }
// triangle drawing functions // triangle drawing functions
@ -139,7 +139,7 @@ void GLContext::glopBegin(GLContext *c, GLParam *p) {
break; break;
} }
switch (c->polygon_mode_back) { switch (polygon_mode_back) {
case TGL_POINT: case TGL_POINT:
draw_triangle_back = gl_draw_triangle_point; draw_triangle_back = gl_draw_triangle_point;
break; break;
@ -191,7 +191,7 @@ static inline void gl_vertex_transform(GLContext *c, GLVertex *v) {
v->clip_code = gl_clipcode(v->pc.X, v->pc.Y, v->pc.Z, v->pc.W); v->clip_code = gl_clipcode(v->pc.X, v->pc.Y, v->pc.Z, v->pc.W);
} }
void GLContext::glopVertex(GLContext *c, GLParam *p) { void GLContext::glopVertex(GLParam *p) {
GLVertex *v; GLVertex *v;
int n, cnt; int n, cnt;
@ -223,7 +223,7 @@ void GLContext::glopVertex(GLContext *c, GLParam *p) {
v->coord.Z = p[3].f; v->coord.Z = p[3].f;
v->coord.W = p[4].f; v->coord.W = p[4].f;
gl_vertex_transform(c, v); gl_vertex_transform(this, v);
// color // color
@ -253,7 +253,7 @@ void GLContext::glopVertex(GLContext *c, GLParam *p) {
vertex_n = n; vertex_n = n;
} }
void GLContext::glopEnd(GLContext *c, GLParam *) { void GLContext::glopEnd(GLParam *) {
assert(in_begin == 1); assert(in_begin == 1);
if (vertex_cnt > 0) { if (vertex_cnt > 0) {

View file

@ -210,8 +210,8 @@ void GLContext::presentBufferDirtyRects() {
bool blendingEnabled = fb->isBlendingEnabled(); bool blendingEnabled = fb->isBlendingEnabled();
bool alphaTestEnabled = fb->isAlphaTestEnabled(); bool alphaTestEnabled = fb->isAlphaTestEnabled();
c->fb->enableBlending(false); fb->enableBlending(false);
c->fb->enableAlphaTest(false); fb->enableAlphaTest(false);
for (RectangleIterator it = rectangles.begin(); it != rectangles.end(); ++it) { for (RectangleIterator it = rectangles.begin(); it != rectangles.end(); ++it) {
DebugDrawRectangle((*it).rectangle, (*it).r, (*it).g, (*it).b); DebugDrawRectangle((*it).rectangle, (*it).r, (*it).g, (*it).b);

View file

@ -389,7 +389,7 @@ struct GLContext {
// opaque structure for user's use // opaque structure for user's use
void *opaque; void *opaque;
// resize viewport function // resize viewport function
int (*gl_resize_viewport)(GLContext *c, int *xsize, int *ysize); int (*gl_resize_viewport)(int *xsize, int *ysize);
// depth test // depth test
int depth_test; int depth_test;
@ -411,12 +411,13 @@ struct GLContext {
public: public:
// The glob* functions exposed to public, however they are only for internal use. // The glob* functions exposed to public, however they are only for internal use.
// Calling them from outside of TinyGL is forbidden // Calling them from outside of TinyGL is forbidden
#define ADD_OP(a, b, d) void glop ## a (GLContext *c, GLParam *p); #define ADD_OP(a, b, d) void glop ## a (GLParam *p);
#include "graphics/tinygl/opinfo.h" #include "graphics/tinygl/opinfo.h"
void gl_add_op(GLParam *p); void gl_add_op(GLParam *p);
void gl_compile_op(GLParam *p); void gl_compile_op(GLParam *p);
void gl_eval_viewport();
void gl_transform_to_viewport(GLVertex *v); void gl_transform_to_viewport(GLVertex *v);
void gl_draw_triangle(GLVertex *p0, GLVertex *p1, GLVertex *p2); void gl_draw_triangle(GLVertex *p0, GLVertex *p1, GLVertex *p2);
void gl_draw_line(GLVertex *p0, GLVertex *p1); void gl_draw_line(GLVertex *p0, GLVertex *p1);