Convert g3_draw_bitmap floats to structures

This commit is contained in:
Kp 2015-04-02 02:36:56 +00:00
parent 4e6d9b9901
commit 68241ffbad

View file

@ -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[2] / 2,
ret_rgba[3] / 2 ret_rgba[3] / 2
}}; }};
array<GLfloat, 16 * 4> dark_lca, bright_lca; array<GLfloat, 16 * 4> dark_lca, bright_lca;
for (uint_fast32_t i = 0; i != dark_lca.size(); i += 4) 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) void g3_draw_bitmap(const vms_vector &pos,fix width,fix height,grs_bitmap &bm)
{ {
int i; int i;
GLfloat vertex_array[12], color_array[16], texcoord_array[8];
r_bitmapc++; 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); width = fixmul(width,Matrix_scale.x);
height = fixmul(height,Matrix_scale.y); 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<fvertex_t, point_count> vertex_array;
array<fcolor_t, point_count> color_array;
array<ftexcoord_t, point_count> texcoord_array;
for (i=0;i<4;i++){ for (i=0;i<4;i++){
const auto v1 = vm_vec_sub(pos,View_position); const auto v1 = vm_vec_sub(pos,View_position);
auto pv = vm_vec_rotate(v1,View_matrix); auto pv = vm_vec_rotate(v1,View_matrix);
switch (i){ switch (i){
case 0: case 0:
texcoord_array[i*2] = 0.0; texcoord_array[i].u = 0.0;
texcoord_array[i*2+1] = 0.0; texcoord_array[i].v = 0.0;
pv.x+=-width; pv.x+=-width;
pv.y+=height; pv.y+=height;
break; break;
case 1: case 1:
texcoord_array[i*2] = bm.gltexture->u; texcoord_array[i].u = bm.gltexture->u;
texcoord_array[i*2+1] = 0.0; texcoord_array[i].v = 0.0;
pv.x+=width; pv.x+=width;
pv.y+=height; pv.y+=height;
break; break;
case 2: case 2:
texcoord_array[i*2] = bm.gltexture->u; texcoord_array[i].u = bm.gltexture->u;
texcoord_array[i*2+1] = bm.gltexture->v; texcoord_array[i].v = bm.gltexture->v;
pv.x+=width; pv.x+=width;
pv.y+=-height; pv.y+=-height;
break; break;
case 3: case 3:
texcoord_array[i*2] = 0.0; texcoord_array[i].u = 0.0;
texcoord_array[i*2+1] = bm.gltexture->v; texcoord_array[i].v = bm.gltexture->v;
pv.x+=-width; pv.x+=-width;
pv.y+=-height; pv.y+=-height;
break; break;
} }
color_array[i*4] = 1.0; color_array[i].r = 1.0;
color_array[i*4+1] = 1.0; color_array[i].g = 1.0;
color_array[i*4+2] = 1.0; color_array[i].b = 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)); 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*3] = f2glf(pv.x); vertex_array[i].y = f2glf(pv.y);
vertex_array[i*3+1] = f2glf(pv.y); vertex_array[i].z = -f2glf(pv.z);
vertex_array[i*3+2] = -f2glf(pv.z);
} }
glVertexPointer(3, GL_FLOAT, 0, vertex_array); glVertexPointer(3, GL_FLOAT, 0, vertex_array.data());
glColorPointer(4, GL_FLOAT, 0, color_array); glColorPointer(4, GL_FLOAT, 0, color_array.data());
glTexCoordPointer(2, GL_FLOAT, 0, texcoord_array); glTexCoordPointer(2, GL_FLOAT, 0, texcoord_array.data());
glDrawArrays(GL_TRIANGLE_FAN, 0, 4); // Replaced GL_QUADS glDrawArrays(GL_TRIANGLE_FAN, 0, 4); // Replaced GL_QUADS
glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY); glDisableClientState(GL_COLOR_ARRAY);