From 68241ffbad987f67852777d971c88a6baa9555be Mon Sep 17 00:00:00 2001 From: Kp Date: Thu, 2 Apr 2015 02:36:56 +0000 Subject: [PATCH] Convert g3_draw_bitmap floats to structures --- similar/arch/ogl/ogl.cpp | 55 +++++++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 21 deletions(-) diff --git a/similar/arch/ogl/ogl.cpp b/similar/arch/ogl/ogl.cpp index 2797a5a10..05a2f7c02 100644 --- a/similar/arch/ogl/ogl.cpp +++ b/similar/arch/ogl/ogl.cpp @@ -576,7 +576,6 @@ void ogl_draw_vertex_reticle(int cross,int primary,int secondary,int color,int a ret_rgba[2] / 2, ret_rgba[3] / 2 }}; - array dark_lca, bright_lca; for (uint_fast32_t i = 0; i != dark_lca.size(); i += 4) { @@ -999,7 +998,6 @@ void _g3_draw_tmap_2(unsigned nv, const g3s_point *const *const pointlist, const void g3_draw_bitmap(const vms_vector &pos,fix width,fix height,grs_bitmap &bm) { int i; - GLfloat vertex_array[12], color_array[16], texcoord_array[8]; r_bitmapc++; @@ -1013,48 +1011,63 @@ void g3_draw_bitmap(const vms_vector &pos,fix width,fix height,grs_bitmap &bm) width = fixmul(width,Matrix_scale.x); height = fixmul(height,Matrix_scale.y); + constexpr unsigned point_count = 4; + struct fvertex_t + { + GLfloat x, y, z; + }; + struct fcolor_t + { + GLfloat r, g, b, a; + }; + struct ftexcoord_t + { + GLfloat u, v; + }; + array vertex_array; + array color_array; + array texcoord_array; for (i=0;i<4;i++){ const auto v1 = vm_vec_sub(pos,View_position); auto pv = vm_vec_rotate(v1,View_matrix); switch (i){ case 0: - texcoord_array[i*2] = 0.0; - texcoord_array[i*2+1] = 0.0; + texcoord_array[i].u = 0.0; + texcoord_array[i].v = 0.0; pv.x+=-width; pv.y+=height; break; case 1: - texcoord_array[i*2] = bm.gltexture->u; - texcoord_array[i*2+1] = 0.0; + texcoord_array[i].u = bm.gltexture->u; + texcoord_array[i].v = 0.0; pv.x+=width; pv.y+=height; break; case 2: - texcoord_array[i*2] = bm.gltexture->u; - texcoord_array[i*2+1] = bm.gltexture->v; + texcoord_array[i].u = bm.gltexture->u; + texcoord_array[i].v = bm.gltexture->v; pv.x+=width; pv.y+=-height; break; case 3: - texcoord_array[i*2] = 0.0; - texcoord_array[i*2+1] = bm.gltexture->v; + texcoord_array[i].u = 0.0; + texcoord_array[i].v = bm.gltexture->v; pv.x+=-width; pv.y+=-height; break; } - color_array[i*4] = 1.0; - color_array[i*4+1] = 1.0; - color_array[i*4+2] = 1.0; - color_array[i*4+3] = (grd_curcanv->cv_fade_level >= GR_FADE_OFF)?1.0:(1.0 - (float)grd_curcanv->cv_fade_level / ((float)GR_FADE_LEVELS - 1.0)); - - vertex_array[i*3] = f2glf(pv.x); - vertex_array[i*3+1] = f2glf(pv.y); - vertex_array[i*3+2] = -f2glf(pv.z); + color_array[i].r = 1.0; + color_array[i].g = 1.0; + color_array[i].b = 1.0; + color_array[i].a = (grd_curcanv->cv_fade_level >= GR_FADE_OFF)?1.0:(1.0 - (float)grd_curcanv->cv_fade_level / ((float)GR_FADE_LEVELS - 1.0)); + vertex_array[i].x = f2glf(pv.x); + vertex_array[i].y = f2glf(pv.y); + vertex_array[i].z = -f2glf(pv.z); } - glVertexPointer(3, GL_FLOAT, 0, vertex_array); - glColorPointer(4, GL_FLOAT, 0, color_array); - glTexCoordPointer(2, GL_FLOAT, 0, texcoord_array); + glVertexPointer(3, GL_FLOAT, 0, vertex_array.data()); + glColorPointer(4, GL_FLOAT, 0, color_array.data()); + glTexCoordPointer(2, GL_FLOAT, 0, texcoord_array.data()); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); // Replaced GL_QUADS glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_COLOR_ARRAY);