This is an automated email from the git hooks/post-receive script. smcv pushed a commit to annotated tag 1.5a in repository iortcw.
commit c0afb3acd913a1cac092bd8f08c5d6038ae62072 Author: MAN-AT-ARMS <[email protected]> Date: Fri Oct 21 19:28:02 2016 -0400 All: Rend2: Remove half float support --- MP/code/rend2/tr_bsp.c | 4 +-- MP/code/rend2/tr_extensions.c | 35 --------------------- MP/code/rend2/tr_image.c | 73 +++++++++++++++---------------------------- MP/code/rend2/tr_init.c | 4 --- MP/code/rend2/tr_local.h | 11 ++----- MP/code/rend2/tr_model.c | 28 ++++++++++------- MP/code/rend2/tr_vbo.c | 36 +++++---------------- SP/code/rend2/tr_bsp.c | 4 +-- SP/code/rend2/tr_extensions.c | 35 --------------------- SP/code/rend2/tr_image.c | 73 +++++++++++++++---------------------------- SP/code/rend2/tr_init.c | 4 --- SP/code/rend2/tr_local.h | 9 +----- SP/code/rend2/tr_model.c | 28 ++++++++++------- SP/code/rend2/tr_vbo.c | 36 +++++---------------- 14 files changed, 105 insertions(+), 275 deletions(-) diff --git a/MP/code/rend2/tr_bsp.c b/MP/code/rend2/tr_bsp.c index b045a8b..f437db3 100644 --- a/MP/code/rend2/tr_bsp.c +++ b/MP/code/rend2/tr_bsp.c @@ -460,7 +460,7 @@ static void R_LoadLightmaps( lump_t *l, lump_t *surfs ) { } if (r_mergeLightmaps->integer) - R_UpdateSubImage(tr.lightmaps[lightmapnum], image, xoff, yoff, tr.lightmapSize, tr.lightmapSize); + R_UpdateSubImage(tr.lightmaps[lightmapnum], image, xoff, yoff, tr.lightmapSize, tr.lightmapSize, textureInternalFormat); else tr.lightmaps[i] = R_CreateImage(va("*lightmap%d", i), image, tr.lightmapSize, tr.lightmapSize, IMGTYPE_COLORALPHA, imgFlags, textureInternalFormat ); @@ -489,7 +489,7 @@ static void R_LoadLightmaps( lump_t *l, lump_t *surfs ) { } if (r_mergeLightmaps->integer) - R_UpdateSubImage(tr.deluxemaps[lightmapnum], image, xoff, yoff, tr.lightmapSize, tr.lightmapSize ); + R_UpdateSubImage(tr.deluxemaps[lightmapnum], image, xoff, yoff, tr.lightmapSize, tr.lightmapSize, GL_RGBA8 ); else tr.deluxemaps[i] = R_CreateImage(va("*deluxemap%d", i), image, tr.lightmapSize, tr.lightmapSize, IMGTYPE_DELUXE, imgFlags, 0 ); } diff --git a/MP/code/rend2/tr_extensions.c b/MP/code/rend2/tr_extensions.c index 9be4800..ee12a92 100644 --- a/MP/code/rend2/tr_extensions.c +++ b/MP/code/rend2/tr_extensions.c @@ -166,20 +166,6 @@ void GLimp_InitExtraExtensions() ri.Printf(PRINT_ALL, result[2], extension); } - // GL_ARB_half_float_pixel - extension = "GL_ARB_half_float_pixel"; - glRefConfig.halfFloatPixel = qfalse; - if( GLimp_HaveExtension( extension ) ) - { - glRefConfig.halfFloatPixel = !!r_arb_half_float_pixel->integer; - - ri.Printf(PRINT_ALL, result[glRefConfig.halfFloatPixel], extension); - } - else - { - ri.Printf(PRINT_ALL, result[2], extension); - } - // GL_EXT_framebuffer_object extension = "GL_EXT_framebuffer_object"; glRefConfig.framebufferObject = qfalse; @@ -311,27 +297,6 @@ void GLimp_InitExtraExtensions() ri.Printf(PRINT_ALL, result[2], extension); } - // GL_ARB_half_float_vertex - extension = "GL_ARB_half_float_vertex"; - glRefConfig.packedTexcoordDataType = GL_FLOAT; - glRefConfig.packedTexcoordDataSize = sizeof(float) * 2; - if( GLimp_HaveExtension( extension ) ) - { - qboolean useExt = !!r_arb_half_float_vertex->integer; - - if (useExt) - { - glRefConfig.packedTexcoordDataType = GL_HALF_FLOAT; - glRefConfig.packedTexcoordDataSize = sizeof(uint16_t) * 2; - } - - ri.Printf(PRINT_ALL, result[useExt], extension); - } - else - { - ri.Printf(PRINT_ALL, result[2], extension); - } - // GL_EXT_direct_state_access extension = "GL_EXT_direct_state_access"; glRefConfig.directStateAccess = qfalse; diff --git a/MP/code/rend2/tr_image.c b/MP/code/rend2/tr_image.c index 37c98de..234b707 100644 --- a/MP/code/rend2/tr_image.c +++ b/MP/code/rend2/tr_image.c @@ -1997,6 +1997,9 @@ static int CalculateMipSize(int width, int height, GLenum picFormat) case GL_SRGB8_ALPHA8_EXT: return numPixels * 4; + case GL_RGBA16: + return numPixels * 8; + default: ri.Printf(PRINT_ALL, "Unsupported texture format %08x\n", picFormat); return 0; @@ -2024,29 +2027,15 @@ static GLenum PixelDataFormatFromInternalFormat(GLenum internalFormat) static void RawImage_UploadTexture(GLuint texture, byte *data, int x, int y, int width, int height, GLenum target, GLenum picFormat, int numMips, GLenum internalFormat, imgType_t type, imgFlags_t flags, qboolean subtexture ) { GLenum dataFormat, dataType; - qboolean rgtc = (internalFormat == GL_COMPRESSED_RG_RGTC2); - qboolean compressed = (!(picFormat == GL_RGBA8) || (picFormat == GL_SRGB8_ALPHA8_EXT)); + qboolean rgtc = internalFormat == GL_COMPRESSED_RG_RGTC2; + qboolean rgba8 = picFormat == GL_RGBA8 || picFormat == GL_SRGB8_ALPHA8_EXT; + qboolean rgba = rgba8 || picFormat == GL_RGBA16; qboolean mipmap = !!(flags & IMGFLAG_MIPMAP); int size, miplevel; qboolean lastMip = qfalse; dataFormat = PixelDataFormatFromInternalFormat(internalFormat); - - // FIXME: This is an old hack to use half floats with lightmaps, use picFormat to determine this instead. - switch (internalFormat) - { - case GL_RGBA16F_ARB: - dataType = GL_HALF_FLOAT_ARB; - break; - - case GL_RGBA16: - dataType = GL_UNSIGNED_SHORT; - break; - - default: - dataType = GL_UNSIGNED_BYTE; - break; - } + dataType = picFormat == GL_RGBA16 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_BYTE; miplevel = 0; do @@ -2054,21 +2043,21 @@ static void RawImage_UploadTexture(GLuint texture, byte *data, int x, int y, int lastMip = (width == 1 && height == 1) || !mipmap; size = CalculateMipSize(width, height, picFormat); - if (compressed) + if (!rgba) { qglCompressedTextureSubImage2DEXT(texture, target, miplevel, x, y, width, height, picFormat, size, data); } else { - if (miplevel != 0 && r_colorMipLevels->integer) + if (rgba8 && miplevel != 0 && r_colorMipLevels->integer) R_BlendOverTexture((byte *)data, width * height, mipBlendColors[miplevel]); - if (rgtc) + if (rgba8 && rgtc) RawImage_UploadToRgtc2Texture(texture, miplevel, x, y, width, height, data); else qglTextureSubImage2DEXT(texture, target, miplevel, x, y, width, height, dataFormat, dataType, data); - if (!lastMip && numMips < 2) + if (rgba8 && !lastMip && numMips < 2) { if (type == IMGTYPE_NORMAL || type == IMGTYPE_NORMALHEIGHT) R_MipMapNormalHeight(data, data, width, height, glRefConfig.swizzleNormalmap); @@ -2107,12 +2096,12 @@ static void Upload32(byte *data, int x, int y, int width, int height, GLenum pic imgType_t type = image->type; imgFlags_t flags = image->flags; GLenum internalFormat = image->internalFormat; - qboolean compressed = (picFormat != GL_RGBA8 && picFormat != GL_SRGB8_ALPHA8_EXT); - qboolean mipmap = !!(flags & IMGFLAG_MIPMAP) && (!compressed || numMips > 1); + qboolean rgba8 = picFormat == GL_RGBA8 || picFormat == GL_SRGB8_ALPHA8_EXT; + qboolean mipmap = !!(flags & IMGFLAG_MIPMAP) && (rgba8 || numMips > 1); qboolean cubemap = !!(flags & IMGFLAG_CUBEMAP); - // These operations cannot be performed on pre-compressed images. - if (!compressed && !cubemap) + // These operations cannot be performed on non-rgba8 images. + if (rgba8 && !cubemap) { c = width*height; scan = data; @@ -2185,7 +2174,7 @@ image_t *R_CreateImage2( const char *name, byte *pic, int width, int height, GLe qboolean isLightmap = qfalse, scaled = qfalse; long hash; int glWrapClampMode, mipWidth, mipHeight, miplevel; - qboolean compressed = (!(picFormat == GL_RGBA8) || (picFormat == GL_SRGB8_ALPHA8_EXT)); + qboolean rgba8 = picFormat == GL_RGBA8 || picFormat == GL_SRGB8_ALPHA8_EXT; qboolean mipmap = !!(flags & IMGFLAG_MIPMAP); qboolean cubemap = !!(flags & IMGFLAG_CUBEMAP); qboolean picmip = !!(flags & IMGFLAG_PICMIP); @@ -2226,10 +2215,10 @@ image_t *R_CreateImage2( const char *name, byte *pic, int width, int height, GLe image->internalFormat = internalFormat; // Possibly scale image before uploading. - // if compressed and uploading an image, skip picmips. + // if not rgba8 and uploading an image, skip picmips. if (!cubemap) { - if (!compressed) + if (rgba8) scaled = RawImage_ScaleToPower2(&pic, &width, &height, type, flags, &resampledBuffer); else if (pic && picmip) { @@ -2334,9 +2323,9 @@ image_t *R_CreateImage(const char *name, byte *pic, int width, int height, imgTy } -void R_UpdateSubImage( image_t *image, byte *pic, int x, int y, int width, int height ) +void R_UpdateSubImage( image_t *image, byte *pic, int x, int y, int width, int height, GLenum picFormat ) { - Upload32(pic, x, y, width, height, GL_RGBA8, 0, image, qfalse); + Upload32(pic, x, y, width, height, picFormat, 0, image, qfalse); } //=================================================================== @@ -2871,25 +2860,13 @@ void R_CreateBuiltinImages( void ) { tr.textureDepthImage = R_CreateImage("*texturedepth", NULL, PSHADOW_MAP_SIZE, PSHADOW_MAP_SIZE, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, GL_DEPTH_COMPONENT24_ARB); { - unsigned short sdata[4]; void *p; - if (hdrFormat == GL_RGBA16F_ARB) - { - sdata[0] = FloatToHalf(0.0f); - sdata[1] = FloatToHalf(0.45f); - sdata[2] = FloatToHalf(1.0f); - sdata[3] = FloatToHalf(1.0f); - p = &sdata[0]; - } - else - { - data[0][0][0] = 0; - data[0][0][1] = 0.45f * 255; - data[0][0][2] = 255; - data[0][0][3] = 255; - p = data; - } + data[0][0][0] = 0; + data[0][0][1] = 0.45f * 255; + data[0][0][2] = 255; + data[0][0][3] = 255; + p = data; tr.calcLevelsImage = R_CreateImage("*calcLevels", p, 1, 1, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, hdrFormat); tr.targetLevelsImage = R_CreateImage("*targetLevels", p, 1, 1, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, hdrFormat); diff --git a/MP/code/rend2/tr_init.c b/MP/code/rend2/tr_init.c index 540d128..ec0a200 100644 --- a/MP/code/rend2/tr_init.c +++ b/MP/code/rend2/tr_init.c @@ -121,8 +121,6 @@ cvar_t *r_ext_draw_range_elements; cvar_t *r_ext_multi_draw_arrays; cvar_t *r_ext_framebuffer_object; cvar_t *r_ext_texture_float; -cvar_t *r_arb_half_float_pixel; -cvar_t *r_arb_half_float_vertex; cvar_t *r_ext_framebuffer_multisample; cvar_t *r_arb_seamless_cube_map; cvar_t *r_arb_vertex_array_object; @@ -1287,8 +1285,6 @@ void R_Register( void ) { r_ext_multi_draw_arrays = ri.Cvar_Get( "r_ext_multi_draw_arrays", "1", CVAR_ARCHIVE | CVAR_LATCH); r_ext_framebuffer_object = ri.Cvar_Get( "r_ext_framebuffer_object", "1", CVAR_ARCHIVE | CVAR_LATCH); r_ext_texture_float = ri.Cvar_Get( "r_ext_texture_float", "1", CVAR_ARCHIVE | CVAR_LATCH); - r_arb_half_float_pixel = ri.Cvar_Get( "r_arb_half_float_pixel", "1", CVAR_ARCHIVE | CVAR_LATCH); - r_arb_half_float_vertex = ri.Cvar_Get( "r_arb_half_float_vertex", "1", CVAR_ARCHIVE | CVAR_LATCH); r_ext_framebuffer_multisample = ri.Cvar_Get( "r_ext_framebuffer_multisample", "0", CVAR_ARCHIVE | CVAR_LATCH); r_arb_seamless_cube_map = ri.Cvar_Get( "r_arb_seamless_cube_map", "0", CVAR_ARCHIVE | CVAR_LATCH); r_arb_vertex_array_object = ri.Cvar_Get( "r_arb_vertex_array_object", "1", CVAR_ARCHIVE | CVAR_LATCH); diff --git a/MP/code/rend2/tr_local.h b/MP/code/rend2/tr_local.h index 266458b..f9cb6c2 100644 --- a/MP/code/rend2/tr_local.h +++ b/MP/code/rend2/tr_local.h @@ -1519,7 +1519,6 @@ typedef struct { qboolean textureNonPowerOfTwo; qboolean textureFloat; - qboolean halfFloatPixel; textureCompressionRef_t textureCompression; qboolean swizzleNormalmap; @@ -1529,9 +1528,6 @@ typedef struct { qboolean depthClamp; qboolean seamlessCubeMap; - GLenum packedTexcoordDataType; - int packedTexcoordDataSize; - qboolean vertexArrayObject; qboolean directStateAccess; } glRefConfig_t; @@ -1875,8 +1871,6 @@ extern cvar_t *r_ext_draw_range_elements; extern cvar_t *r_ext_multi_draw_arrays; extern cvar_t *r_ext_framebuffer_object; extern cvar_t *r_ext_texture_float; -extern cvar_t *r_arb_half_float_pixel; -extern cvar_t *r_arb_half_float_vertex; extern cvar_t *r_ext_framebuffer_multisample; extern cvar_t *r_arb_seamless_cube_map; extern cvar_t *r_arb_vertex_array_object; @@ -2142,8 +2136,8 @@ model_t *R_AllocModel( void ); void R_Init( void ); image_t *R_FindImageFile( const char *name, imgType_t type, imgFlags_t flags ); -image_t *R_CreateImage( const char *name, byte *pic, int width, int height, imgType_t type, imgFlags_t flags, int internalFormat ); -void R_UpdateSubImage( image_t *image, byte *pic, int x, int y, int width, int height ); +image_t *R_CreateImage( const char *name, byte *pic, int width, int height, imgType_t type, imgFlags_t flags, int internalFormat ); +void R_UpdateSubImage( image_t *image, byte *pic, int x, int y, int width, int height, GLenum picFormat ); qboolean R_GetModeInfo( int *width, int *height, float *windowAspect, int mode ); void R_SetColorMappings( void ); @@ -2394,7 +2388,6 @@ VERTEX BUFFER OBJECTS void R_VaoPackTangent(int16_t *out, vec4_t v); void R_VaoPackNormal(int16_t *out, vec3_t v); -int R_VaoPackTexCoord(byte *out, vec2_t st); void R_VaoPackColor(uint16_t *out, vec4_t c); void R_VaoUnpackTangent(vec4_t v, int16_t *pack); void R_VaoUnpackNormal(vec3_t v, int16_t *pack); diff --git a/MP/code/rend2/tr_model.c b/MP/code/rend2/tr_model.c index 9163b50..dac962d 100644 --- a/MP/code/rend2/tr_model.c +++ b/MP/code/rend2/tr_model.c @@ -957,10 +957,10 @@ static qboolean R_LoadMDC( model_t *mod, int lod, void *buffer, const char *modN { // vertex animation, store texcoords first, then position/normal/tangents offset_st = 0; - offset_xyz = surf->numVerts * glRefConfig.packedTexcoordDataSize; + offset_xyz = surf->numVerts * sizeof(vec2_t); offset_normal = offset_xyz + sizeof(vec3_t); offset_tangent = offset_normal + sizeof(int16_t) * 4; - stride_st = glRefConfig.packedTexcoordDataSize; + stride_st = sizeof(vec2_t); stride_xyz = sizeof(vec3_t) + sizeof(int16_t) * 4; stride_xyz += sizeof(int16_t) * 4; stride_normal = stride_tangent = stride_xyz; @@ -972,7 +972,7 @@ static qboolean R_LoadMDC( model_t *mod, int lod, void *buffer, const char *modN // no animation, interleave everything offset_xyz = 0; offset_st = offset_xyz + sizeof(vec3_t); - offset_normal = offset_st + glRefConfig.packedTexcoordDataSize; + offset_normal = offset_st + sizeof(vec2_t); offset_tangent = offset_normal + sizeof(int16_t) * 4; stride_xyz = offset_tangent + sizeof(int16_t) * 4; stride_st = stride_normal = stride_tangent = stride_xyz; @@ -988,7 +988,8 @@ static qboolean R_LoadMDC( model_t *mod, int lod, void *buffer, const char *modN { st = surf->st; for ( j = 0 ; j < surf->numVerts ; j++, st++ ) { - dataOfs += R_VaoPackTexCoord(data + dataOfs, st->st); + memcpy(data + dataOfs, &st->st, sizeof(vec2_t)); + dataOfs += sizeof(st->st); } v = surf->verts; @@ -1018,7 +1019,8 @@ static qboolean R_LoadMDC( model_t *mod, int lod, void *buffer, const char *modN dataOfs += sizeof(v->xyz); // st - dataOfs += R_VaoPackTexCoord(data + dataOfs, st->st); + memcpy(data + dataOfs, &st->st, sizeof(vec2_t)); + dataOfs += sizeof(st->st); // normal memcpy(data + dataOfs, &v->normal, sizeof(int16_t) * 4); @@ -1051,7 +1053,7 @@ static qboolean R_LoadMDC( model_t *mod, int lod, void *buffer, const char *modN vaoSurf->vao->attribs[ATTR_INDEX_TANGENT ].count = 4; vaoSurf->vao->attribs[ATTR_INDEX_POSITION].type = GL_FLOAT; - vaoSurf->vao->attribs[ATTR_INDEX_TEXCOORD].type = glRefConfig.packedTexcoordDataType; + vaoSurf->vao->attribs[ATTR_INDEX_TEXCOORD].type = GL_FLOAT; vaoSurf->vao->attribs[ATTR_INDEX_NORMAL ].type = GL_SHORT; vaoSurf->vao->attribs[ATTR_INDEX_TANGENT ].type = GL_SHORT; @@ -1438,10 +1440,10 @@ static qboolean R_LoadMD3(model_t * mod, int lod, void *buffer, const char *modN { // vertex animation, store texcoords first, then position/normal/tangents offset_st = 0; - offset_xyz = surf->numVerts * glRefConfig.packedTexcoordDataSize; + offset_xyz = surf->numVerts * sizeof(vec2_t); offset_normal = offset_xyz + sizeof(vec3_t); offset_tangent = offset_normal + sizeof(int16_t) * 4; - stride_st = glRefConfig.packedTexcoordDataSize; + stride_st = sizeof(vec2_t); stride_xyz = sizeof(vec3_t) + sizeof(int16_t) * 4; stride_xyz += sizeof(int16_t) * 4; stride_normal = stride_tangent = stride_xyz; @@ -1453,7 +1455,7 @@ static qboolean R_LoadMD3(model_t * mod, int lod, void *buffer, const char *modN // no animation, interleave everything offset_xyz = 0; offset_st = offset_xyz + sizeof(vec3_t); - offset_normal = offset_st + glRefConfig.packedTexcoordDataSize; + offset_normal = offset_st + sizeof(vec2_t); offset_tangent = offset_normal + sizeof(int16_t) * 4; stride_xyz = offset_tangent + sizeof(int16_t) * 4; stride_st = stride_normal = stride_tangent = stride_xyz; @@ -1469,7 +1471,8 @@ static qboolean R_LoadMD3(model_t * mod, int lod, void *buffer, const char *modN { st = surf->st; for ( j = 0 ; j < surf->numVerts ; j++, st++ ) { - dataOfs += R_VaoPackTexCoord(data + dataOfs, st->st); + memcpy(data + dataOfs, &st->st, sizeof(vec2_t)); + dataOfs += sizeof(st->st); } v = surf->verts; @@ -1499,7 +1502,8 @@ static qboolean R_LoadMD3(model_t * mod, int lod, void *buffer, const char *modN dataOfs += sizeof(v->xyz); // st - dataOfs += R_VaoPackTexCoord(data + dataOfs, st->st); + memcpy(data + dataOfs, &st->st, sizeof(vec2_t)); + dataOfs += sizeof(st->st); // normal memcpy(data + dataOfs, &v->normal, sizeof(int16_t) * 4); @@ -1532,7 +1536,7 @@ static qboolean R_LoadMD3(model_t * mod, int lod, void *buffer, const char *modN vaoSurf->vao->attribs[ATTR_INDEX_TANGENT ].count = 4; vaoSurf->vao->attribs[ATTR_INDEX_POSITION].type = GL_FLOAT; - vaoSurf->vao->attribs[ATTR_INDEX_TEXCOORD].type = glRefConfig.packedTexcoordDataType; + vaoSurf->vao->attribs[ATTR_INDEX_TEXCOORD].type = GL_FLOAT; vaoSurf->vao->attribs[ATTR_INDEX_NORMAL ].type = GL_SHORT; vaoSurf->vao->attribs[ATTR_INDEX_TANGENT ].type = GL_SHORT; diff --git a/MP/code/rend2/tr_vbo.c b/MP/code/rend2/tr_vbo.c index 0028094..08dbed6 100644 --- a/MP/code/rend2/tr_vbo.c +++ b/MP/code/rend2/tr_vbo.c @@ -39,28 +39,6 @@ void R_VaoPackNormal(int16_t *out, vec3_t v) out[3] = 0; } -int R_VaoPackTexCoord(byte *out, vec2_t st) -{ - if (glRefConfig.packedTexcoordDataType == GL_HALF_FLOAT) - { - uint16_t *num = (uint16_t *)out; - - *num++ = FloatToHalf(st[0]); - *num++ = FloatToHalf(st[1]); - - return sizeof(*num) * 2; - } - else - { - float *num = (float *)out; - - *num++ = st[0]; - *num++ = st[1]; - - return sizeof(*num) * 2; - } -} - void R_VaoPackColor(uint16_t *out, vec4_t c) { out[0] = c[0] * 65535.0f + 0.5f; @@ -247,8 +225,8 @@ vao_t *R_CreateVao2(const char *name, int numVertexes, srfVert_t *verts, int num vao->attribs[ATTR_INDEX_POSITION ].type = GL_FLOAT; vao->attribs[ATTR_INDEX_NORMAL ].type = GL_SHORT; vao->attribs[ATTR_INDEX_TANGENT ].type = GL_SHORT; - vao->attribs[ATTR_INDEX_TEXCOORD ].type = glRefConfig.packedTexcoordDataType; - vao->attribs[ATTR_INDEX_LIGHTCOORD ].type = glRefConfig.packedTexcoordDataType; + vao->attribs[ATTR_INDEX_TEXCOORD ].type = GL_FLOAT; + vao->attribs[ATTR_INDEX_LIGHTCOORD ].type = GL_FLOAT; vao->attribs[ATTR_INDEX_COLOR ].type = GL_UNSIGNED_SHORT; vao->attribs[ATTR_INDEX_LIGHTDIRECTION].type = GL_SHORT; @@ -263,8 +241,8 @@ vao_t *R_CreateVao2(const char *name, int numVertexes, srfVert_t *verts, int num vao->attribs[ATTR_INDEX_POSITION ].offset = 0; dataSize = sizeof(verts[0].xyz); vao->attribs[ATTR_INDEX_NORMAL ].offset = dataSize; dataSize += sizeof(verts[0].normal); vao->attribs[ATTR_INDEX_TANGENT ].offset = dataSize; dataSize += sizeof(verts[0].tangent); - vao->attribs[ATTR_INDEX_TEXCOORD ].offset = dataSize; dataSize += glRefConfig.packedTexcoordDataSize; - vao->attribs[ATTR_INDEX_LIGHTCOORD ].offset = dataSize; dataSize += glRefConfig.packedTexcoordDataSize; + vao->attribs[ATTR_INDEX_TEXCOORD ].offset = dataSize; dataSize += sizeof(verts[0].st); + vao->attribs[ATTR_INDEX_LIGHTCOORD ].offset = dataSize; dataSize += sizeof(verts[0].lightmap); vao->attribs[ATTR_INDEX_COLOR ].offset = dataSize; dataSize += sizeof(verts[0].color); vao->attribs[ATTR_INDEX_LIGHTDIRECTION].offset = dataSize; dataSize += sizeof(verts[0].lightdir); @@ -304,10 +282,12 @@ vao_t *R_CreateVao2(const char *name, int numVertexes, srfVert_t *verts, int num dataOfs += sizeof(verts[i].tangent); // texcoords - dataOfs += R_VaoPackTexCoord(data + dataOfs, verts[i].st); + memcpy(data + dataOfs, &verts[i].st, sizeof(verts[i].st)); + dataOfs += sizeof(verts[i].st); // lightmap texcoords - dataOfs += R_VaoPackTexCoord(data + dataOfs, verts[i].lightmap); + memcpy(data + dataOfs, &verts[i].lightmap, sizeof(verts[i].lightmap)); + dataOfs += sizeof(verts[i].lightmap); // colors memcpy(data + dataOfs, &verts[i].color, sizeof(verts[i].color)); diff --git a/SP/code/rend2/tr_bsp.c b/SP/code/rend2/tr_bsp.c index 08e9e21..3c5266b 100644 --- a/SP/code/rend2/tr_bsp.c +++ b/SP/code/rend2/tr_bsp.c @@ -459,7 +459,7 @@ static void R_LoadLightmaps( lump_t *l, lump_t *surfs ) { } if (r_mergeLightmaps->integer) - R_UpdateSubImage(tr.lightmaps[lightmapnum], image, xoff, yoff, tr.lightmapSize, tr.lightmapSize); + R_UpdateSubImage(tr.lightmaps[lightmapnum], image, xoff, yoff, tr.lightmapSize, tr.lightmapSize, textureInternalFormat); else tr.lightmaps[i] = R_CreateImage(va("*lightmap%d", i), image, tr.lightmapSize, tr.lightmapSize, IMGTYPE_COLORALPHA, imgFlags, textureInternalFormat ); @@ -488,7 +488,7 @@ static void R_LoadLightmaps( lump_t *l, lump_t *surfs ) { } if (r_mergeLightmaps->integer) - R_UpdateSubImage(tr.deluxemaps[lightmapnum], image, xoff, yoff, tr.lightmapSize, tr.lightmapSize ); + R_UpdateSubImage(tr.deluxemaps[lightmapnum], image, xoff, yoff, tr.lightmapSize, tr.lightmapSize, GL_RGBA8 ); else tr.deluxemaps[i] = R_CreateImage(va("*deluxemap%d", i), image, tr.lightmapSize, tr.lightmapSize, IMGTYPE_DELUXE, imgFlags, 0 ); } diff --git a/SP/code/rend2/tr_extensions.c b/SP/code/rend2/tr_extensions.c index 9be4800..ee12a92 100644 --- a/SP/code/rend2/tr_extensions.c +++ b/SP/code/rend2/tr_extensions.c @@ -166,20 +166,6 @@ void GLimp_InitExtraExtensions() ri.Printf(PRINT_ALL, result[2], extension); } - // GL_ARB_half_float_pixel - extension = "GL_ARB_half_float_pixel"; - glRefConfig.halfFloatPixel = qfalse; - if( GLimp_HaveExtension( extension ) ) - { - glRefConfig.halfFloatPixel = !!r_arb_half_float_pixel->integer; - - ri.Printf(PRINT_ALL, result[glRefConfig.halfFloatPixel], extension); - } - else - { - ri.Printf(PRINT_ALL, result[2], extension); - } - // GL_EXT_framebuffer_object extension = "GL_EXT_framebuffer_object"; glRefConfig.framebufferObject = qfalse; @@ -311,27 +297,6 @@ void GLimp_InitExtraExtensions() ri.Printf(PRINT_ALL, result[2], extension); } - // GL_ARB_half_float_vertex - extension = "GL_ARB_half_float_vertex"; - glRefConfig.packedTexcoordDataType = GL_FLOAT; - glRefConfig.packedTexcoordDataSize = sizeof(float) * 2; - if( GLimp_HaveExtension( extension ) ) - { - qboolean useExt = !!r_arb_half_float_vertex->integer; - - if (useExt) - { - glRefConfig.packedTexcoordDataType = GL_HALF_FLOAT; - glRefConfig.packedTexcoordDataSize = sizeof(uint16_t) * 2; - } - - ri.Printf(PRINT_ALL, result[useExt], extension); - } - else - { - ri.Printf(PRINT_ALL, result[2], extension); - } - // GL_EXT_direct_state_access extension = "GL_EXT_direct_state_access"; glRefConfig.directStateAccess = qfalse; diff --git a/SP/code/rend2/tr_image.c b/SP/code/rend2/tr_image.c index be1ea98..730ca64 100644 --- a/SP/code/rend2/tr_image.c +++ b/SP/code/rend2/tr_image.c @@ -1992,6 +1992,9 @@ static int CalculateMipSize(int width, int height, GLenum picFormat) case GL_SRGB8_ALPHA8_EXT: return numPixels * 4; + case GL_RGBA16: + return numPixels * 8; + default: ri.Printf(PRINT_ALL, "Unsupported texture format %08x\n", picFormat); return 0; @@ -2019,29 +2022,15 @@ static GLenum PixelDataFormatFromInternalFormat(GLenum internalFormat) static void RawImage_UploadTexture(GLuint texture, byte *data, int x, int y, int width, int height, GLenum target, GLenum picFormat, int numMips, GLenum internalFormat, imgType_t type, imgFlags_t flags, qboolean subtexture ) { GLenum dataFormat, dataType; - qboolean rgtc = (internalFormat == GL_COMPRESSED_RG_RGTC2); - qboolean compressed = (!(picFormat == GL_RGBA8) || (picFormat == GL_SRGB8_ALPHA8_EXT)); + qboolean rgtc = internalFormat == GL_COMPRESSED_RG_RGTC2; + qboolean rgba8 = picFormat == GL_RGBA8 || picFormat == GL_SRGB8_ALPHA8_EXT; + qboolean rgba = rgba8 || picFormat == GL_RGBA16; qboolean mipmap = !!(flags & IMGFLAG_MIPMAP); int size, miplevel; qboolean lastMip = qfalse; dataFormat = PixelDataFormatFromInternalFormat(internalFormat); - - // FIXME: This is an old hack to use half floats with lightmaps, use picFormat to determine this instead. - switch (internalFormat) - { - case GL_RGBA16F_ARB: - dataType = GL_HALF_FLOAT_ARB; - break; - - case GL_RGBA16: - dataType = GL_UNSIGNED_SHORT; - break; - - default: - dataType = GL_UNSIGNED_BYTE; - break; - } + dataType = picFormat == GL_RGBA16 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_BYTE; miplevel = 0; do @@ -2049,21 +2038,21 @@ static void RawImage_UploadTexture(GLuint texture, byte *data, int x, int y, int lastMip = (width == 1 && height == 1) || !mipmap; size = CalculateMipSize(width, height, picFormat); - if (compressed) + if (!rgba) { qglCompressedTextureSubImage2DEXT(texture, target, miplevel, x, y, width, height, picFormat, size, data); } else { - if (miplevel != 0 && r_colorMipLevels->integer) + if (rgba8 && miplevel != 0 && r_colorMipLevels->integer) R_BlendOverTexture((byte *)data, width * height, mipBlendColors[miplevel]); - if (rgtc) + if (rgba8 && rgtc) RawImage_UploadToRgtc2Texture(texture, miplevel, x, y, width, height, data); else qglTextureSubImage2DEXT(texture, target, miplevel, x, y, width, height, dataFormat, dataType, data); - if (!lastMip && numMips < 2) + if (rgba8 && !lastMip && numMips < 2) { if (type == IMGTYPE_NORMAL || type == IMGTYPE_NORMALHEIGHT) R_MipMapNormalHeight(data, data, width, height, glRefConfig.swizzleNormalmap); @@ -2102,12 +2091,12 @@ static void Upload32(byte *data, int x, int y, int width, int height, GLenum pic imgType_t type = image->type; imgFlags_t flags = image->flags; GLenum internalFormat = image->internalFormat; - qboolean compressed = (picFormat != GL_RGBA8 && picFormat != GL_SRGB8_ALPHA8_EXT); - qboolean mipmap = !!(flags & IMGFLAG_MIPMAP) && (!compressed || numMips > 1); + qboolean rgba8 = picFormat == GL_RGBA8 || picFormat == GL_SRGB8_ALPHA8_EXT; + qboolean mipmap = !!(flags & IMGFLAG_MIPMAP) && (rgba8 || numMips > 1); qboolean cubemap = !!(flags & IMGFLAG_CUBEMAP); - // These operations cannot be performed on pre-compressed images. - if (!compressed && !cubemap) + // These operations cannot be performed on non-rgba8 images. + if (rgba8 && !cubemap) { c = width*height; scan = data; @@ -2181,7 +2170,7 @@ image_t *R_CreateImageExt2( const char *name, byte *pic, int width, int height, qboolean isLightmap = qfalse, scaled = qfalse; long hash; int glWrapClampMode, mipWidth, mipHeight, miplevel; - qboolean compressed = (!(picFormat == GL_RGBA8) || (picFormat == GL_SRGB8_ALPHA8_EXT)); + qboolean rgba8 = picFormat == GL_RGBA8 || picFormat == GL_SRGB8_ALPHA8_EXT; qboolean mipmap = !!(flags & IMGFLAG_MIPMAP); qboolean cubemap = !!(flags & IMGFLAG_CUBEMAP); qboolean picmip = !!(flags & IMGFLAG_PICMIP); @@ -2222,10 +2211,10 @@ image_t *R_CreateImageExt2( const char *name, byte *pic, int width, int height, image->internalFormat = internalFormat; // Possibly scale image before uploading. - // if compressed and uploading an image, skip picmips. + // if not rgba8 and uploading an image, skip picmips. if (!cubemap) { - if (!compressed) + if (rgba8) scaled = RawImage_ScaleToPower2(&pic, &width, &height, type, flags, &resampledBuffer); else if (pic && picmip) { @@ -2329,9 +2318,9 @@ image_t *R_CreateImage( const char *name, byte *pic, int width, int height, imgT } //----(SA) end -void R_UpdateSubImage( image_t *image, byte *pic, int x, int y, int width, int height ) +void R_UpdateSubImage( image_t *image, byte *pic, int x, int y, int width, int height, GLenum picFormat ) { - Upload32(pic, x, y, width, height, GL_RGBA8, 0, image, qfalse); + Upload32(pic, x, y, width, height, picFormat, 0, image, qfalse); } //=================================================================== @@ -2875,25 +2864,13 @@ void R_CreateBuiltinImages( void ) { tr.textureDepthImage = R_CreateImage("*texturedepth", NULL, PSHADOW_MAP_SIZE, PSHADOW_MAP_SIZE, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, GL_DEPTH_COMPONENT24_ARB); { - unsigned short sdata[4]; void *p; - if (hdrFormat == GL_RGBA16F_ARB) - { - sdata[0] = FloatToHalf(0.0f); - sdata[1] = FloatToHalf(0.45f); - sdata[2] = FloatToHalf(1.0f); - sdata[3] = FloatToHalf(1.0f); - p = &sdata[0]; - } - else - { - data[0][0][0] = 0; - data[0][0][1] = 0.45f * 255; - data[0][0][2] = 255; - data[0][0][3] = 255; - p = data; - } + data[0][0][0] = 0; + data[0][0][1] = 0.45f * 255; + data[0][0][2] = 255; + data[0][0][3] = 255; + p = data; tr.calcLevelsImage = R_CreateImage("*calcLevels", p, 1, 1, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, hdrFormat); tr.targetLevelsImage = R_CreateImage("*targetLevels", p, 1, 1, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, hdrFormat); diff --git a/SP/code/rend2/tr_init.c b/SP/code/rend2/tr_init.c index f539ba2..115ee35 100644 --- a/SP/code/rend2/tr_init.c +++ b/SP/code/rend2/tr_init.c @@ -126,8 +126,6 @@ cvar_t *r_ext_draw_range_elements; cvar_t *r_ext_multi_draw_arrays; cvar_t *r_ext_framebuffer_object; cvar_t *r_ext_texture_float; -cvar_t *r_arb_half_float_pixel; -cvar_t *r_arb_half_float_vertex; cvar_t *r_ext_framebuffer_multisample; cvar_t *r_arb_seamless_cube_map; cvar_t *r_arb_vertex_array_object; @@ -1303,8 +1301,6 @@ void R_Register( void ) { r_ext_multi_draw_arrays = ri.Cvar_Get( "r_ext_multi_draw_arrays", "1", CVAR_ARCHIVE | CVAR_LATCH); r_ext_framebuffer_object = ri.Cvar_Get( "r_ext_framebuffer_object", "1", CVAR_ARCHIVE | CVAR_LATCH); r_ext_texture_float = ri.Cvar_Get( "r_ext_texture_float", "1", CVAR_ARCHIVE | CVAR_LATCH); - r_arb_half_float_pixel = ri.Cvar_Get( "r_arb_half_float_pixel", "1", CVAR_ARCHIVE | CVAR_LATCH); - r_arb_half_float_vertex = ri.Cvar_Get( "r_arb_half_float_vertex", "1", CVAR_ARCHIVE | CVAR_LATCH); r_ext_framebuffer_multisample = ri.Cvar_Get( "r_ext_framebuffer_multisample", "0", CVAR_ARCHIVE | CVAR_LATCH); r_arb_seamless_cube_map = ri.Cvar_Get( "r_arb_seamless_cube_map", "0", CVAR_ARCHIVE | CVAR_LATCH); r_arb_vertex_array_object = ri.Cvar_Get( "r_arb_vertex_array_object", "1", CVAR_ARCHIVE | CVAR_LATCH); diff --git a/SP/code/rend2/tr_local.h b/SP/code/rend2/tr_local.h index e714967..b612f20 100644 --- a/SP/code/rend2/tr_local.h +++ b/SP/code/rend2/tr_local.h @@ -1532,7 +1532,6 @@ typedef struct { qboolean textureNonPowerOfTwo; qboolean textureFloat; - qboolean halfFloatPixel; textureCompressionRef_t textureCompression; qboolean swizzleNormalmap; @@ -1542,9 +1541,6 @@ typedef struct { qboolean depthClamp; qboolean seamlessCubeMap; - GLenum packedTexcoordDataType; - int packedTexcoordDataSize; - qboolean vertexArrayObject; qboolean directStateAccess; } glRefConfig_t; @@ -1900,8 +1896,6 @@ extern cvar_t *r_ext_draw_range_elements; extern cvar_t *r_ext_multi_draw_arrays; extern cvar_t *r_ext_framebuffer_object; extern cvar_t *r_ext_texture_float; -extern cvar_t *r_arb_half_float_pixel; -extern cvar_t *r_arb_half_float_vertex; extern cvar_t *r_ext_framebuffer_multisample; extern cvar_t *r_arb_seamless_cube_map; extern cvar_t *r_arb_vertex_array_object; @@ -2170,7 +2164,7 @@ image_t *R_CreateImage( const char *name, byte *pic, int width, int height, //----(SA) added (didn't want to modify all instances of R_CreateImage() image_t *R_CreateImageExt( const char *name, byte *pic, int width, int height, imgType_t type, imgFlags_t flags, int internalFormat, qboolean characterMip ); //----(SA) end -void R_UpdateSubImage( image_t *image, byte *pic, int x, int y, int width, int height ); +void R_UpdateSubImage( image_t *image, byte *pic, int x, int y, int width, int height, GLenum picFormat ); qboolean R_GetModeInfo( int *width, int *height, float *windowAspect, int mode ); void R_SetColorMappings( void ); @@ -2423,7 +2417,6 @@ VERTEX BUFFER OBJECTS void R_VaoPackTangent(int16_t *out, vec4_t v); void R_VaoPackNormal(int16_t *out, vec3_t v); -int R_VaoPackTexCoord(byte *out, vec2_t st); void R_VaoPackColor(uint16_t *out, vec4_t c); void R_VaoUnpackTangent(vec4_t v, int16_t *pack); void R_VaoUnpackNormal(vec3_t v, int16_t *pack); diff --git a/SP/code/rend2/tr_model.c b/SP/code/rend2/tr_model.c index 2ae1854..1eacb93 100644 --- a/SP/code/rend2/tr_model.c +++ b/SP/code/rend2/tr_model.c @@ -959,10 +959,10 @@ static qboolean R_LoadMDC( model_t *mod, int lod, void *buffer, const char *modN { // vertex animation, store texcoords first, then position/normal/tangents offset_st = 0; - offset_xyz = surf->numVerts * glRefConfig.packedTexcoordDataSize; + offset_xyz = surf->numVerts * sizeof(vec2_t); offset_normal = offset_xyz + sizeof(vec3_t); offset_tangent = offset_normal + sizeof(int16_t) * 4; - stride_st = glRefConfig.packedTexcoordDataSize; + stride_st = sizeof(vec2_t); stride_xyz = sizeof(vec3_t) + sizeof(int16_t) * 4; stride_xyz += sizeof(int16_t) * 4; stride_normal = stride_tangent = stride_xyz; @@ -974,7 +974,7 @@ static qboolean R_LoadMDC( model_t *mod, int lod, void *buffer, const char *modN // no animation, interleave everything offset_xyz = 0; offset_st = offset_xyz + sizeof(vec3_t); - offset_normal = offset_st + glRefConfig.packedTexcoordDataSize; + offset_normal = offset_st + sizeof(vec2_t); offset_tangent = offset_normal + sizeof(int16_t) * 4; stride_xyz = offset_tangent + sizeof(int16_t) * 4; stride_st = stride_normal = stride_tangent = stride_xyz; @@ -990,7 +990,8 @@ static qboolean R_LoadMDC( model_t *mod, int lod, void *buffer, const char *modN { st = surf->st; for ( j = 0 ; j < surf->numVerts ; j++, st++ ) { - dataOfs += R_VaoPackTexCoord(data + dataOfs, st->st); + memcpy(data + dataOfs, &st->st, sizeof(vec2_t)); + dataOfs += sizeof(st->st); } v = surf->verts; @@ -1020,7 +1021,8 @@ static qboolean R_LoadMDC( model_t *mod, int lod, void *buffer, const char *modN dataOfs += sizeof(v->xyz); // st - dataOfs += R_VaoPackTexCoord(data + dataOfs, st->st); + memcpy(data + dataOfs, &st->st, sizeof(vec2_t)); + dataOfs += sizeof(st->st); // normal memcpy(data + dataOfs, &v->normal, sizeof(int16_t) * 4); @@ -1053,7 +1055,7 @@ static qboolean R_LoadMDC( model_t *mod, int lod, void *buffer, const char *modN vaoSurf->vao->attribs[ATTR_INDEX_TANGENT ].count = 4; vaoSurf->vao->attribs[ATTR_INDEX_POSITION].type = GL_FLOAT; - vaoSurf->vao->attribs[ATTR_INDEX_TEXCOORD].type = glRefConfig.packedTexcoordDataType; + vaoSurf->vao->attribs[ATTR_INDEX_TEXCOORD].type = GL_FLOAT; vaoSurf->vao->attribs[ATTR_INDEX_NORMAL ].type = GL_SHORT; vaoSurf->vao->attribs[ATTR_INDEX_TANGENT ].type = GL_SHORT; @@ -1440,10 +1442,10 @@ static qboolean R_LoadMD3(model_t * mod, int lod, void *buffer, const char *modN { // vertex animation, store texcoords first, then position/normal/tangents offset_st = 0; - offset_xyz = surf->numVerts * glRefConfig.packedTexcoordDataSize; + offset_xyz = surf->numVerts * sizeof(vec2_t); offset_normal = offset_xyz + sizeof(vec3_t); offset_tangent = offset_normal + sizeof(int16_t) * 4; - stride_st = glRefConfig.packedTexcoordDataSize; + stride_st = sizeof(vec2_t); stride_xyz = sizeof(vec3_t) + sizeof(int16_t) * 4; stride_xyz += sizeof(int16_t) * 4; stride_normal = stride_tangent = stride_xyz; @@ -1455,7 +1457,7 @@ static qboolean R_LoadMD3(model_t * mod, int lod, void *buffer, const char *modN // no animation, interleave everything offset_xyz = 0; offset_st = offset_xyz + sizeof(vec3_t); - offset_normal = offset_st + glRefConfig.packedTexcoordDataSize; + offset_normal = offset_st + sizeof(vec2_t); offset_tangent = offset_normal + sizeof(int16_t) * 4; stride_xyz = offset_tangent + sizeof(int16_t) * 4; stride_st = stride_normal = stride_tangent = stride_xyz; @@ -1471,7 +1473,8 @@ static qboolean R_LoadMD3(model_t * mod, int lod, void *buffer, const char *modN { st = surf->st; for ( j = 0 ; j < surf->numVerts ; j++, st++ ) { - dataOfs += R_VaoPackTexCoord(data + dataOfs, st->st); + memcpy(data + dataOfs, &st->st, sizeof(vec2_t)); + dataOfs += sizeof(st->st); } v = surf->verts; @@ -1501,7 +1504,8 @@ static qboolean R_LoadMD3(model_t * mod, int lod, void *buffer, const char *modN dataOfs += sizeof(v->xyz); // st - dataOfs += R_VaoPackTexCoord(data + dataOfs, st->st); + memcpy(data + dataOfs, &st->st, sizeof(vec2_t)); + dataOfs += sizeof(st->st); // normal memcpy(data + dataOfs, &v->normal, sizeof(int16_t) * 4); @@ -1534,7 +1538,7 @@ static qboolean R_LoadMD3(model_t * mod, int lod, void *buffer, const char *modN vaoSurf->vao->attribs[ATTR_INDEX_TANGENT ].count = 4; vaoSurf->vao->attribs[ATTR_INDEX_POSITION].type = GL_FLOAT; - vaoSurf->vao->attribs[ATTR_INDEX_TEXCOORD].type = glRefConfig.packedTexcoordDataType; + vaoSurf->vao->attribs[ATTR_INDEX_TEXCOORD].type = GL_FLOAT; vaoSurf->vao->attribs[ATTR_INDEX_NORMAL ].type = GL_SHORT; vaoSurf->vao->attribs[ATTR_INDEX_TANGENT ].type = GL_SHORT; diff --git a/SP/code/rend2/tr_vbo.c b/SP/code/rend2/tr_vbo.c index 0028094..08dbed6 100644 --- a/SP/code/rend2/tr_vbo.c +++ b/SP/code/rend2/tr_vbo.c @@ -39,28 +39,6 @@ void R_VaoPackNormal(int16_t *out, vec3_t v) out[3] = 0; } -int R_VaoPackTexCoord(byte *out, vec2_t st) -{ - if (glRefConfig.packedTexcoordDataType == GL_HALF_FLOAT) - { - uint16_t *num = (uint16_t *)out; - - *num++ = FloatToHalf(st[0]); - *num++ = FloatToHalf(st[1]); - - return sizeof(*num) * 2; - } - else - { - float *num = (float *)out; - - *num++ = st[0]; - *num++ = st[1]; - - return sizeof(*num) * 2; - } -} - void R_VaoPackColor(uint16_t *out, vec4_t c) { out[0] = c[0] * 65535.0f + 0.5f; @@ -247,8 +225,8 @@ vao_t *R_CreateVao2(const char *name, int numVertexes, srfVert_t *verts, int num vao->attribs[ATTR_INDEX_POSITION ].type = GL_FLOAT; vao->attribs[ATTR_INDEX_NORMAL ].type = GL_SHORT; vao->attribs[ATTR_INDEX_TANGENT ].type = GL_SHORT; - vao->attribs[ATTR_INDEX_TEXCOORD ].type = glRefConfig.packedTexcoordDataType; - vao->attribs[ATTR_INDEX_LIGHTCOORD ].type = glRefConfig.packedTexcoordDataType; + vao->attribs[ATTR_INDEX_TEXCOORD ].type = GL_FLOAT; + vao->attribs[ATTR_INDEX_LIGHTCOORD ].type = GL_FLOAT; vao->attribs[ATTR_INDEX_COLOR ].type = GL_UNSIGNED_SHORT; vao->attribs[ATTR_INDEX_LIGHTDIRECTION].type = GL_SHORT; @@ -263,8 +241,8 @@ vao_t *R_CreateVao2(const char *name, int numVertexes, srfVert_t *verts, int num vao->attribs[ATTR_INDEX_POSITION ].offset = 0; dataSize = sizeof(verts[0].xyz); vao->attribs[ATTR_INDEX_NORMAL ].offset = dataSize; dataSize += sizeof(verts[0].normal); vao->attribs[ATTR_INDEX_TANGENT ].offset = dataSize; dataSize += sizeof(verts[0].tangent); - vao->attribs[ATTR_INDEX_TEXCOORD ].offset = dataSize; dataSize += glRefConfig.packedTexcoordDataSize; - vao->attribs[ATTR_INDEX_LIGHTCOORD ].offset = dataSize; dataSize += glRefConfig.packedTexcoordDataSize; + vao->attribs[ATTR_INDEX_TEXCOORD ].offset = dataSize; dataSize += sizeof(verts[0].st); + vao->attribs[ATTR_INDEX_LIGHTCOORD ].offset = dataSize; dataSize += sizeof(verts[0].lightmap); vao->attribs[ATTR_INDEX_COLOR ].offset = dataSize; dataSize += sizeof(verts[0].color); vao->attribs[ATTR_INDEX_LIGHTDIRECTION].offset = dataSize; dataSize += sizeof(verts[0].lightdir); @@ -304,10 +282,12 @@ vao_t *R_CreateVao2(const char *name, int numVertexes, srfVert_t *verts, int num dataOfs += sizeof(verts[i].tangent); // texcoords - dataOfs += R_VaoPackTexCoord(data + dataOfs, verts[i].st); + memcpy(data + dataOfs, &verts[i].st, sizeof(verts[i].st)); + dataOfs += sizeof(verts[i].st); // lightmap texcoords - dataOfs += R_VaoPackTexCoord(data + dataOfs, verts[i].lightmap); + memcpy(data + dataOfs, &verts[i].lightmap, sizeof(verts[i].lightmap)); + dataOfs += sizeof(verts[i].lightmap); // colors memcpy(data + dataOfs, &verts[i].color, sizeof(verts[i].color)); -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/iortcw.git _______________________________________________ Pkg-games-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits

