void agp_draw_vobj(float x1, float y1, float x2, float y2, float* txcos, float* model) { GLfloat verts[] = { x1, y1, x2, y1, x2, y2, x1, y2 }; bool settex = false; agp_shader_envv(MODELVIEW_MATR, model?model:ident, sizeof(float) * 16); /* projection, scissor is set when activating rendertarget */ GLint attrindv = agp_shader_vattribute_loc(ATTRIBUTE_VERTEX); GLint attrindt = agp_shader_vattribute_loc(ATTRIBUTE_TEXCORD); if (attrindv != -1){ glEnableVertexAttribArray(attrindv); glVertexAttribPointer(attrindv, 2, GL_FLOAT, GL_FALSE, 0, verts); if (txcos && attrindt != -1){ settex = true; glEnableVertexAttribArray(attrindt); glVertexAttribPointer(attrindt, 2, GL_FLOAT, GL_FALSE, 0, txcos); } glDrawArrays(GL_TRIANGLE_FAN, 0, 4); if (settex) glDisableVertexAttribArray(attrindt); glDisableVertexAttribArray(attrindv); } }
static void toggle_debugstates(float* modelview) { if (modelview){ float white[3] = {1.0, 1.0, 1.0}; glDepthMask(GL_FALSE); glDisable(GL_DEPTH_TEST); glEnableVertexAttribArray(ATTRIBUTE_VERTEX); agp_shader_activate(agp_default_shader(COLOR_2D)); agp_shader_envv(MODELVIEW_MATR, modelview, sizeof(float) * 16); agp_shader_forceunif("obj_col", shdrvec3, (void*) white, false); } else{ agp_shader_activate(agp_default_shader(COLOR_2D)); glEnable(GL_DEPTH_TEST); glDepthMask(GL_TRUE); glDisableVertexAttribArray(ATTRIBUTE_VERTEX); } }
static void toggle_debugstates(float* modelview) { struct agp_fenv* env = agp_env(); if (modelview){ float white[3] = {1.0, 1.0, 1.0}; env->depth_mask(GL_FALSE); env->disable(GL_DEPTH_TEST); env->enable_vertex_attrarray(ATTRIBUTE_VERTEX); agp_shader_activate(agp_default_shader(COLOR_2D)); agp_shader_envv(MODELVIEW_MATR, modelview, sizeof(float) * 16); agp_shader_forceunif("obj_col", shdrvec3, (void*) white); } else{ agp_shader_activate(agp_default_shader(COLOR_2D)); env->enable(GL_DEPTH_TEST); env->depth_mask(GL_TRUE); env->disable_vertex_attrarray(ATTRIBUTE_VERTEX); } }
void agp_draw_vobj(float x1, float y1, float x2, float y2, const float* txcos, const float* model) { GLfloat verts[] = { x1, y1, x2, y1, x2, y2, x1, y2 }; bool settex = false; struct agp_fenv* env = agp_env(); agp_shader_envv(MODELVIEW_MATR, model ? (void*) model : ident, sizeof(float) * 16); /* projection, scissor is set when activating rendertarget */ GLint attrindv = agp_shader_vattribute_loc(ATTRIBUTE_VERTEX); GLint attrindt = agp_shader_vattribute_loc(ATTRIBUTE_TEXCORD); if (attrindv != -1){ env->enable_vertex_attrarray(attrindv); env->vertex_attrpointer(attrindv, 2, GL_FLOAT, GL_FALSE, 0, verts); if (txcos && attrindt != -1){ settex = true; env->enable_vertex_attrarray(attrindt); env->vertex_attrpointer(attrindt, 2, GL_FLOAT, GL_FALSE, 0, txcos); } env->draw_arrays(GL_TRIANGLE_FAN, 0, 4); if (settex) env->disable_vertex_attrarray(attrindt); env->disable_vertex_attrarray(attrindv); } }