mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-18 01:50:40 +01:00
mesa: Replace Proxy1D/2D/etc with ProxyTex[] indexed by TEXTURE_x_INDEX.
Simplification in colortab.c too.
cherry-picked from master (fe46900703)
This commit is contained in:
parent
a3de65659c
commit
0bc2409e38
5 changed files with 152 additions and 295 deletions
|
|
@ -1821,7 +1821,7 @@ tdfxTestProxyTexImage(GLcontext *ctx, GLenum target,
|
|||
tdfxTexInfo *ti;
|
||||
int memNeeded;
|
||||
|
||||
tObj = ctx->Texture.Proxy2D;
|
||||
tObj = ctx->Texture.ProxyTex[TEXTURE_2D_INDEX];
|
||||
if (!tObj->DriverData)
|
||||
tObj->DriverData = fxAllocTexObjData(fxMesa);
|
||||
ti = TDFX_TEXTURE_DATA(tObj);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* Mesa 3-D graphics library
|
||||
* Version: 6.5.3
|
||||
* Version: 7.1
|
||||
*
|
||||
* Copyright (C) 1999-2007 Brian Paul All Rights Reserved.
|
||||
*
|
||||
|
|
@ -30,6 +30,7 @@
|
|||
#include "image.h"
|
||||
#include "macros.h"
|
||||
#include "state.h"
|
||||
#include "teximage.h"
|
||||
|
||||
|
||||
/**
|
||||
|
|
@ -305,49 +306,6 @@ _mesa_ColorTable( GLenum target, GLenum internalFormat,
|
|||
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); /* too complex */
|
||||
|
||||
switch (target) {
|
||||
case GL_TEXTURE_1D:
|
||||
texObj = texUnit->Current1D;
|
||||
table = &texObj->Palette;
|
||||
break;
|
||||
case GL_TEXTURE_2D:
|
||||
texObj = texUnit->Current2D;
|
||||
table = &texObj->Palette;
|
||||
break;
|
||||
case GL_TEXTURE_3D:
|
||||
texObj = texUnit->Current3D;
|
||||
table = &texObj->Palette;
|
||||
break;
|
||||
case GL_TEXTURE_CUBE_MAP_ARB:
|
||||
if (!ctx->Extensions.ARB_texture_cube_map) {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glColorTable(target)");
|
||||
return;
|
||||
}
|
||||
texObj = texUnit->CurrentCubeMap;
|
||||
table = &texObj->Palette;
|
||||
break;
|
||||
case GL_PROXY_TEXTURE_1D:
|
||||
texObj = ctx->Texture.Proxy1D;
|
||||
table = &texObj->Palette;
|
||||
proxy = GL_TRUE;
|
||||
break;
|
||||
case GL_PROXY_TEXTURE_2D:
|
||||
texObj = ctx->Texture.Proxy2D;
|
||||
table = &texObj->Palette;
|
||||
proxy = GL_TRUE;
|
||||
break;
|
||||
case GL_PROXY_TEXTURE_3D:
|
||||
texObj = ctx->Texture.Proxy3D;
|
||||
table = &texObj->Palette;
|
||||
proxy = GL_TRUE;
|
||||
break;
|
||||
case GL_PROXY_TEXTURE_CUBE_MAP_ARB:
|
||||
if (!ctx->Extensions.ARB_texture_cube_map) {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glColorTable(target)");
|
||||
return;
|
||||
}
|
||||
texObj = ctx->Texture.ProxyCubeMap;
|
||||
table = &texObj->Palette;
|
||||
break;
|
||||
case GL_SHARED_TEXTURE_PALETTE_EXT:
|
||||
table = &ctx->Texture.Palette;
|
||||
break;
|
||||
|
|
@ -396,8 +354,19 @@ _mesa_ColorTable( GLenum target, GLenum internalFormat,
|
|||
proxy = GL_TRUE;
|
||||
break;
|
||||
default:
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glColorTable(target)");
|
||||
return;
|
||||
/* try texture targets */
|
||||
{
|
||||
struct gl_texture_object *texobj
|
||||
= _mesa_select_tex_object(ctx, texUnit, target);
|
||||
if (texobj) {
|
||||
table = &texobj->Palette;
|
||||
proxy = _mesa_is_proxy_texture(target);
|
||||
}
|
||||
else {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glColorTable(target)");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
assert(table);
|
||||
|
|
@ -499,26 +468,6 @@ _mesa_ColorSubTable( GLenum target, GLsizei start,
|
|||
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
|
||||
|
||||
switch (target) {
|
||||
case GL_TEXTURE_1D:
|
||||
texObj = texUnit->Current1D;
|
||||
table = &texObj->Palette;
|
||||
break;
|
||||
case GL_TEXTURE_2D:
|
||||
texObj = texUnit->Current2D;
|
||||
table = &texObj->Palette;
|
||||
break;
|
||||
case GL_TEXTURE_3D:
|
||||
texObj = texUnit->Current3D;
|
||||
table = &texObj->Palette;
|
||||
break;
|
||||
case GL_TEXTURE_CUBE_MAP_ARB:
|
||||
if (!ctx->Extensions.ARB_texture_cube_map) {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glColorSubTable(target)");
|
||||
return;
|
||||
}
|
||||
texObj = texUnit->CurrentCubeMap;
|
||||
table = &texObj->Palette;
|
||||
break;
|
||||
case GL_SHARED_TEXTURE_PALETTE_EXT:
|
||||
table = &ctx->Texture.Palette;
|
||||
break;
|
||||
|
|
@ -547,8 +496,15 @@ _mesa_ColorSubTable( GLenum target, GLsizei start,
|
|||
bias = ctx->Pixel.ColorTableBias[COLORTABLE_POSTCOLORMATRIX];
|
||||
break;
|
||||
default:
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glColorSubTable(target)");
|
||||
return;
|
||||
/* try texture targets */
|
||||
texObj = _mesa_select_tex_object(ctx, texUnit, target);
|
||||
if (texObj && !_mesa_is_proxy_texture(target)) {
|
||||
table = &texObj->Palette;
|
||||
}
|
||||
else {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glColorSubTable(target)");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
assert(table);
|
||||
|
|
@ -636,22 +592,6 @@ _mesa_GetColorTable( GLenum target, GLenum format,
|
|||
}
|
||||
|
||||
switch (target) {
|
||||
case GL_TEXTURE_1D:
|
||||
table = &texUnit->Current1D->Palette;
|
||||
break;
|
||||
case GL_TEXTURE_2D:
|
||||
table = &texUnit->Current2D->Palette;
|
||||
break;
|
||||
case GL_TEXTURE_3D:
|
||||
table = &texUnit->Current3D->Palette;
|
||||
break;
|
||||
case GL_TEXTURE_CUBE_MAP_ARB:
|
||||
if (!ctx->Extensions.ARB_texture_cube_map) {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glGetColorTable(target)");
|
||||
return;
|
||||
}
|
||||
table = &texUnit->CurrentCubeMap->Palette;
|
||||
break;
|
||||
case GL_SHARED_TEXTURE_PALETTE_EXT:
|
||||
table = &ctx->Texture.Palette;
|
||||
break;
|
||||
|
|
@ -672,8 +612,18 @@ _mesa_GetColorTable( GLenum target, GLenum format,
|
|||
table = &ctx->ColorTable[COLORTABLE_POSTCOLORMATRIX];
|
||||
break;
|
||||
default:
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glGetColorTable(target)");
|
||||
return;
|
||||
/* try texture targets */
|
||||
{
|
||||
struct gl_texture_object *texobj
|
||||
= _mesa_select_tex_object(ctx, texUnit, target);
|
||||
if (texobj && !_mesa_is_proxy_texture(target)) {
|
||||
table = &texobj->Palette;
|
||||
}
|
||||
else {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glGetColorTable(target)");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ASSERT(table);
|
||||
|
|
@ -781,65 +731,41 @@ _mesa_GetColorTable( GLenum target, GLenum format,
|
|||
void GLAPIENTRY
|
||||
_mesa_ColorTableParameterfv(GLenum target, GLenum pname, const GLfloat *params)
|
||||
{
|
||||
GLfloat *scale, *bias;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
|
||||
|
||||
switch (target) {
|
||||
case GL_COLOR_TABLE_SGI:
|
||||
if (pname == GL_COLOR_TABLE_SCALE_SGI) {
|
||||
COPY_4V(ctx->Pixel.ColorTableScale[COLORTABLE_PRECONVOLUTION], params);
|
||||
}
|
||||
else if (pname == GL_COLOR_TABLE_BIAS_SGI) {
|
||||
COPY_4V(ctx->Pixel.ColorTableBias[COLORTABLE_PRECONVOLUTION], params);
|
||||
}
|
||||
else {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glColorTableParameterfv(pname)");
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case GL_TEXTURE_COLOR_TABLE_SGI:
|
||||
if (!ctx->Extensions.SGI_texture_color_table) {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glColorTableParameter(target)");
|
||||
return;
|
||||
}
|
||||
if (pname == GL_COLOR_TABLE_SCALE_SGI) {
|
||||
COPY_4V(ctx->Pixel.TextureColorTableScale, params);
|
||||
}
|
||||
else if (pname == GL_COLOR_TABLE_BIAS_SGI) {
|
||||
COPY_4V(ctx->Pixel.TextureColorTableBias, params);
|
||||
}
|
||||
else {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glColorTableParameterfv(pname)");
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case GL_POST_CONVOLUTION_COLOR_TABLE_SGI:
|
||||
if (pname == GL_COLOR_TABLE_SCALE_SGI) {
|
||||
COPY_4V(ctx->Pixel.ColorTableScale[COLORTABLE_POSTCONVOLUTION], params);
|
||||
}
|
||||
else if (pname == GL_COLOR_TABLE_BIAS_SGI) {
|
||||
COPY_4V(ctx->Pixel.ColorTableBias[COLORTABLE_POSTCONVOLUTION], params);
|
||||
}
|
||||
else {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glColorTableParameterfv(pname)");
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI:
|
||||
if (pname == GL_COLOR_TABLE_SCALE_SGI) {
|
||||
COPY_4V(ctx->Pixel.ColorTableScale[COLORTABLE_POSTCOLORMATRIX], params);
|
||||
}
|
||||
else if (pname == GL_COLOR_TABLE_BIAS_SGI) {
|
||||
COPY_4V(ctx->Pixel.ColorTableBias[COLORTABLE_POSTCOLORMATRIX], params);
|
||||
}
|
||||
else {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glColorTableParameterfv(pname)");
|
||||
return;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glColorTableParameter(target)");
|
||||
return;
|
||||
case GL_COLOR_TABLE_SGI:
|
||||
scale = ctx->Pixel.ColorTableScale[COLORTABLE_PRECONVOLUTION];
|
||||
bias = ctx->Pixel.ColorTableBias[COLORTABLE_PRECONVOLUTION];
|
||||
break;
|
||||
case GL_TEXTURE_COLOR_TABLE_SGI:
|
||||
scale = ctx->Pixel.TextureColorTableScale;
|
||||
bias = ctx->Pixel.TextureColorTableBias;
|
||||
break;
|
||||
case GL_POST_CONVOLUTION_COLOR_TABLE_SGI:
|
||||
scale = ctx->Pixel.ColorTableScale[COLORTABLE_POSTCONVOLUTION];
|
||||
bias = ctx->Pixel.ColorTableBias[COLORTABLE_POSTCONVOLUTION];
|
||||
break;
|
||||
case GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI:
|
||||
scale = ctx->Pixel.ColorTableScale[COLORTABLE_POSTCOLORMATRIX];
|
||||
bias = ctx->Pixel.ColorTableBias[COLORTABLE_POSTCOLORMATRIX];
|
||||
break;
|
||||
default:
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glColorTableParameter(target)");
|
||||
return;
|
||||
}
|
||||
|
||||
if (pname == GL_COLOR_TABLE_SCALE_SGI) {
|
||||
COPY_4V(scale, params);
|
||||
}
|
||||
else if (pname == GL_COLOR_TABLE_BIAS_SGI) {
|
||||
COPY_4V(bias, params);
|
||||
}
|
||||
else {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glColorTableParameterfv(pname)");
|
||||
return;
|
||||
}
|
||||
|
||||
ctx->NewState |= _NEW_PIXEL;
|
||||
|
|
@ -879,40 +805,6 @@ _mesa_GetColorTableParameterfv( GLenum target, GLenum pname, GLfloat *params )
|
|||
ASSERT_OUTSIDE_BEGIN_END(ctx);
|
||||
|
||||
switch (target) {
|
||||
case GL_TEXTURE_1D:
|
||||
table = &texUnit->Current1D->Palette;
|
||||
break;
|
||||
case GL_TEXTURE_2D:
|
||||
table = &texUnit->Current2D->Palette;
|
||||
break;
|
||||
case GL_TEXTURE_3D:
|
||||
table = &texUnit->Current3D->Palette;
|
||||
break;
|
||||
case GL_TEXTURE_CUBE_MAP_ARB:
|
||||
if (!ctx->Extensions.ARB_texture_cube_map) {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM,
|
||||
"glGetColorTableParameterfv(target)");
|
||||
return;
|
||||
}
|
||||
table = &texUnit->CurrentCubeMap->Palette;
|
||||
break;
|
||||
case GL_PROXY_TEXTURE_1D:
|
||||
table = &ctx->Texture.Proxy1D->Palette;
|
||||
break;
|
||||
case GL_PROXY_TEXTURE_2D:
|
||||
table = &ctx->Texture.Proxy2D->Palette;
|
||||
break;
|
||||
case GL_PROXY_TEXTURE_3D:
|
||||
table = &ctx->Texture.Proxy3D->Palette;
|
||||
break;
|
||||
case GL_PROXY_TEXTURE_CUBE_MAP_ARB:
|
||||
if (!ctx->Extensions.ARB_texture_cube_map) {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM,
|
||||
"glGetColorTableParameterfv(target)");
|
||||
return;
|
||||
}
|
||||
table = &ctx->Texture.ProxyCubeMap->Palette;
|
||||
break;
|
||||
case GL_SHARED_TEXTURE_PALETTE_EXT:
|
||||
table = &ctx->Texture.Palette;
|
||||
break;
|
||||
|
|
@ -981,8 +873,19 @@ _mesa_GetColorTableParameterfv( GLenum target, GLenum pname, GLfloat *params )
|
|||
table = &ctx->ProxyColorTable[COLORTABLE_POSTCOLORMATRIX];
|
||||
break;
|
||||
default:
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glGetColorTableParameterfv(target)");
|
||||
return;
|
||||
/* try texture targets */
|
||||
{
|
||||
struct gl_texture_object *texobj
|
||||
= _mesa_select_tex_object(ctx, texUnit, target);
|
||||
if (texobj) {
|
||||
table = &texobj->Palette;
|
||||
}
|
||||
else {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM,
|
||||
"glGetColorTableParameterfv(target)");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
assert(table);
|
||||
|
|
@ -1029,40 +932,6 @@ _mesa_GetColorTableParameteriv( GLenum target, GLenum pname, GLint *params )
|
|||
ASSERT_OUTSIDE_BEGIN_END(ctx);
|
||||
|
||||
switch (target) {
|
||||
case GL_TEXTURE_1D:
|
||||
table = &texUnit->Current1D->Palette;
|
||||
break;
|
||||
case GL_TEXTURE_2D:
|
||||
table = &texUnit->Current2D->Palette;
|
||||
break;
|
||||
case GL_TEXTURE_3D:
|
||||
table = &texUnit->Current3D->Palette;
|
||||
break;
|
||||
case GL_TEXTURE_CUBE_MAP_ARB:
|
||||
if (!ctx->Extensions.ARB_texture_cube_map) {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM,
|
||||
"glGetColorTableParameteriv(target)");
|
||||
return;
|
||||
}
|
||||
table = &texUnit->CurrentCubeMap->Palette;
|
||||
break;
|
||||
case GL_PROXY_TEXTURE_1D:
|
||||
table = &ctx->Texture.Proxy1D->Palette;
|
||||
break;
|
||||
case GL_PROXY_TEXTURE_2D:
|
||||
table = &ctx->Texture.Proxy2D->Palette;
|
||||
break;
|
||||
case GL_PROXY_TEXTURE_3D:
|
||||
table = &ctx->Texture.Proxy3D->Palette;
|
||||
break;
|
||||
case GL_PROXY_TEXTURE_CUBE_MAP_ARB:
|
||||
if (!ctx->Extensions.ARB_texture_cube_map) {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM,
|
||||
"glGetColorTableParameteriv(target)");
|
||||
return;
|
||||
}
|
||||
table = &ctx->Texture.ProxyCubeMap->Palette;
|
||||
break;
|
||||
case GL_SHARED_TEXTURE_PALETTE_EXT:
|
||||
table = &ctx->Texture.Palette;
|
||||
break;
|
||||
|
|
@ -1161,8 +1030,19 @@ _mesa_GetColorTableParameteriv( GLenum target, GLenum pname, GLint *params )
|
|||
table = &ctx->ProxyColorTable[COLORTABLE_POSTCOLORMATRIX];
|
||||
break;
|
||||
default:
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glGetColorTableParameteriv(target)");
|
||||
return;
|
||||
/* Try texture targets */
|
||||
{
|
||||
struct gl_texture_object *texobj
|
||||
= _mesa_select_tex_object(ctx, texUnit, target);
|
||||
if (texobj) {
|
||||
table = &texobj->Palette;
|
||||
}
|
||||
else {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM,
|
||||
"glGetColorTableParameteriv(target)");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
assert(table);
|
||||
|
|
|
|||
|
|
@ -1579,6 +1579,7 @@ struct gl_texture_attrib
|
|||
|
||||
struct gl_texture_unit Unit[MAX_TEXTURE_UNITS];
|
||||
|
||||
#if 0
|
||||
struct gl_texture_object *Proxy1D;
|
||||
struct gl_texture_object *Proxy2D;
|
||||
struct gl_texture_object *Proxy3D;
|
||||
|
|
@ -1586,6 +1587,9 @@ struct gl_texture_attrib
|
|||
struct gl_texture_object *ProxyRect;
|
||||
struct gl_texture_object *Proxy1DArray;
|
||||
struct gl_texture_object *Proxy2DArray;
|
||||
#else
|
||||
struct gl_texture_object *ProxyTex[NUM_TEXTURE_TARGETS];
|
||||
#endif
|
||||
|
||||
/** GL_EXT_shared_texture_palette */
|
||||
GLboolean SharedPalette;
|
||||
|
|
|
|||
|
|
@ -767,15 +767,15 @@ _mesa_select_tex_object(GLcontext *ctx, const struct gl_texture_unit *texUnit,
|
|||
case GL_TEXTURE_1D:
|
||||
return texUnit->Current1D;
|
||||
case GL_PROXY_TEXTURE_1D:
|
||||
return ctx->Texture.Proxy1D;
|
||||
return ctx->Texture.ProxyTex[TEXTURE_1D_INDEX];
|
||||
case GL_TEXTURE_2D:
|
||||
return texUnit->Current2D;
|
||||
case GL_PROXY_TEXTURE_2D:
|
||||
return ctx->Texture.Proxy2D;
|
||||
return ctx->Texture.ProxyTex[TEXTURE_2D_INDEX];
|
||||
case GL_TEXTURE_3D:
|
||||
return texUnit->Current3D;
|
||||
case GL_PROXY_TEXTURE_3D:
|
||||
return ctx->Texture.Proxy3D;
|
||||
return ctx->Texture.ProxyTex[TEXTURE_3D_INDEX];
|
||||
case GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB:
|
||||
case GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB:
|
||||
case GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB:
|
||||
|
|
@ -787,25 +787,25 @@ _mesa_select_tex_object(GLcontext *ctx, const struct gl_texture_unit *texUnit,
|
|||
? texUnit->CurrentCubeMap : NULL;
|
||||
case GL_PROXY_TEXTURE_CUBE_MAP_ARB:
|
||||
return ctx->Extensions.ARB_texture_cube_map
|
||||
? ctx->Texture.ProxyCubeMap : NULL;
|
||||
? ctx->Texture.ProxyTex[TEXTURE_CUBE_INDEX] : NULL;
|
||||
case GL_TEXTURE_RECTANGLE_NV:
|
||||
return ctx->Extensions.NV_texture_rectangle
|
||||
? texUnit->CurrentRect : NULL;
|
||||
case GL_PROXY_TEXTURE_RECTANGLE_NV:
|
||||
return ctx->Extensions.NV_texture_rectangle
|
||||
? ctx->Texture.ProxyRect : NULL;
|
||||
? ctx->Texture.ProxyTex[TEXTURE_RECT_INDEX] : NULL;
|
||||
case GL_TEXTURE_1D_ARRAY_EXT:
|
||||
return ctx->Extensions.MESA_texture_array
|
||||
? texUnit->Current1DArray : NULL;
|
||||
case GL_PROXY_TEXTURE_1D_ARRAY_EXT:
|
||||
return ctx->Extensions.MESA_texture_array
|
||||
? ctx->Texture.Proxy1DArray : NULL;
|
||||
? ctx->Texture.ProxyTex[TEXTURE_1D_ARRAY_INDEX] : NULL;
|
||||
case GL_TEXTURE_2D_ARRAY_EXT:
|
||||
return ctx->Extensions.MESA_texture_array
|
||||
? texUnit->Current2DArray : NULL;
|
||||
case GL_PROXY_TEXTURE_2D_ARRAY_EXT:
|
||||
return ctx->Extensions.MESA_texture_array
|
||||
? ctx->Texture.Proxy2DArray : NULL;
|
||||
? ctx->Texture.ProxyTex[TEXTURE_2D_ARRAY_INDEX] : NULL;
|
||||
default:
|
||||
_mesa_problem(NULL, "bad target in _mesa_select_tex_object()");
|
||||
return NULL;
|
||||
|
|
@ -932,106 +932,106 @@ _mesa_get_proxy_tex_image(GLcontext *ctx, GLenum target, GLint level)
|
|||
case GL_PROXY_TEXTURE_1D:
|
||||
if (level >= ctx->Const.MaxTextureLevels)
|
||||
return NULL;
|
||||
texImage = ctx->Texture.Proxy1D->Image[0][level];
|
||||
texImage = ctx->Texture.ProxyTex[TEXTURE_1D_INDEX]->Image[0][level];
|
||||
if (!texImage) {
|
||||
texImage = ctx->Driver.NewTextureImage(ctx);
|
||||
if (!texImage) {
|
||||
_mesa_error(ctx, GL_OUT_OF_MEMORY, "proxy texture allocation");
|
||||
return NULL;
|
||||
}
|
||||
ctx->Texture.Proxy1D->Image[0][level] = texImage;
|
||||
ctx->Texture.ProxyTex[TEXTURE_1D_INDEX]->Image[0][level] = texImage;
|
||||
/* Set the 'back' pointer */
|
||||
texImage->TexObject = ctx->Texture.Proxy1D;
|
||||
texImage->TexObject = ctx->Texture.ProxyTex[TEXTURE_1D_INDEX];
|
||||
}
|
||||
return texImage;
|
||||
case GL_PROXY_TEXTURE_2D:
|
||||
if (level >= ctx->Const.MaxTextureLevels)
|
||||
return NULL;
|
||||
texImage = ctx->Texture.Proxy2D->Image[0][level];
|
||||
texImage = ctx->Texture.ProxyTex[TEXTURE_2D_INDEX]->Image[0][level];
|
||||
if (!texImage) {
|
||||
texImage = ctx->Driver.NewTextureImage(ctx);
|
||||
if (!texImage) {
|
||||
_mesa_error(ctx, GL_OUT_OF_MEMORY, "proxy texture allocation");
|
||||
return NULL;
|
||||
}
|
||||
ctx->Texture.Proxy2D->Image[0][level] = texImage;
|
||||
ctx->Texture.ProxyTex[TEXTURE_2D_INDEX]->Image[0][level] = texImage;
|
||||
/* Set the 'back' pointer */
|
||||
texImage->TexObject = ctx->Texture.Proxy2D;
|
||||
texImage->TexObject = ctx->Texture.ProxyTex[TEXTURE_2D_INDEX];
|
||||
}
|
||||
return texImage;
|
||||
case GL_PROXY_TEXTURE_3D:
|
||||
if (level >= ctx->Const.Max3DTextureLevels)
|
||||
return NULL;
|
||||
texImage = ctx->Texture.Proxy3D->Image[0][level];
|
||||
texImage = ctx->Texture.ProxyTex[TEXTURE_3D_INDEX]->Image[0][level];
|
||||
if (!texImage) {
|
||||
texImage = ctx->Driver.NewTextureImage(ctx);
|
||||
if (!texImage) {
|
||||
_mesa_error(ctx, GL_OUT_OF_MEMORY, "proxy texture allocation");
|
||||
return NULL;
|
||||
}
|
||||
ctx->Texture.Proxy3D->Image[0][level] = texImage;
|
||||
ctx->Texture.ProxyTex[TEXTURE_3D_INDEX]->Image[0][level] = texImage;
|
||||
/* Set the 'back' pointer */
|
||||
texImage->TexObject = ctx->Texture.Proxy3D;
|
||||
texImage->TexObject = ctx->Texture.ProxyTex[TEXTURE_3D_INDEX];
|
||||
}
|
||||
return texImage;
|
||||
case GL_PROXY_TEXTURE_CUBE_MAP:
|
||||
if (level >= ctx->Const.MaxCubeTextureLevels)
|
||||
return NULL;
|
||||
texImage = ctx->Texture.ProxyCubeMap->Image[0][level];
|
||||
texImage = ctx->Texture.ProxyTex[TEXTURE_CUBE_INDEX]->Image[0][level];
|
||||
if (!texImage) {
|
||||
texImage = ctx->Driver.NewTextureImage(ctx);
|
||||
if (!texImage) {
|
||||
_mesa_error(ctx, GL_OUT_OF_MEMORY, "proxy texture allocation");
|
||||
return NULL;
|
||||
}
|
||||
ctx->Texture.ProxyCubeMap->Image[0][level] = texImage;
|
||||
ctx->Texture.ProxyTex[TEXTURE_CUBE_INDEX]->Image[0][level] = texImage;
|
||||
/* Set the 'back' pointer */
|
||||
texImage->TexObject = ctx->Texture.ProxyCubeMap;
|
||||
texImage->TexObject = ctx->Texture.ProxyTex[TEXTURE_CUBE_INDEX];
|
||||
}
|
||||
return texImage;
|
||||
case GL_PROXY_TEXTURE_RECTANGLE_NV:
|
||||
if (level > 0)
|
||||
return NULL;
|
||||
texImage = ctx->Texture.ProxyRect->Image[0][level];
|
||||
texImage = ctx->Texture.ProxyTex[TEXTURE_RECT_INDEX]->Image[0][level];
|
||||
if (!texImage) {
|
||||
texImage = ctx->Driver.NewTextureImage(ctx);
|
||||
if (!texImage) {
|
||||
_mesa_error(ctx, GL_OUT_OF_MEMORY, "proxy texture allocation");
|
||||
return NULL;
|
||||
}
|
||||
ctx->Texture.ProxyRect->Image[0][level] = texImage;
|
||||
ctx->Texture.ProxyTex[TEXTURE_RECT_INDEX]->Image[0][level] = texImage;
|
||||
/* Set the 'back' pointer */
|
||||
texImage->TexObject = ctx->Texture.ProxyRect;
|
||||
texImage->TexObject = ctx->Texture.ProxyTex[TEXTURE_RECT_INDEX];
|
||||
}
|
||||
return texImage;
|
||||
case GL_PROXY_TEXTURE_1D_ARRAY_EXT:
|
||||
if (level >= ctx->Const.MaxTextureLevels)
|
||||
return NULL;
|
||||
texImage = ctx->Texture.Proxy1DArray->Image[0][level];
|
||||
texImage = ctx->Texture.ProxyTex[TEXTURE_1D_ARRAY_INDEX]->Image[0][level];
|
||||
if (!texImage) {
|
||||
texImage = ctx->Driver.NewTextureImage(ctx);
|
||||
if (!texImage) {
|
||||
_mesa_error(ctx, GL_OUT_OF_MEMORY, "proxy texture allocation");
|
||||
return NULL;
|
||||
}
|
||||
ctx->Texture.Proxy1DArray->Image[0][level] = texImage;
|
||||
ctx->Texture.ProxyTex[TEXTURE_1D_ARRAY_INDEX]->Image[0][level] = texImage;
|
||||
/* Set the 'back' pointer */
|
||||
texImage->TexObject = ctx->Texture.Proxy1DArray;
|
||||
texImage->TexObject = ctx->Texture.ProxyTex[TEXTURE_1D_ARRAY_INDEX];
|
||||
}
|
||||
return texImage;
|
||||
case GL_PROXY_TEXTURE_2D_ARRAY_EXT:
|
||||
if (level >= ctx->Const.MaxTextureLevels)
|
||||
return NULL;
|
||||
texImage = ctx->Texture.Proxy2DArray->Image[0][level];
|
||||
texImage = ctx->Texture.ProxyTex[TEXTURE_2D_ARRAY_INDEX]->Image[0][level];
|
||||
if (!texImage) {
|
||||
texImage = ctx->Driver.NewTextureImage(ctx);
|
||||
if (!texImage) {
|
||||
_mesa_error(ctx, GL_OUT_OF_MEMORY, "proxy texture allocation");
|
||||
return NULL;
|
||||
}
|
||||
ctx->Texture.Proxy2DArray->Image[0][level] = texImage;
|
||||
ctx->Texture.ProxyTex[TEXTURE_2D_ARRAY_INDEX]->Image[0][level] = texImage;
|
||||
/* Set the 'back' pointer */
|
||||
texImage->TexObject = ctx->Texture.Proxy2DArray;
|
||||
texImage->TexObject = ctx->Texture.ProxyTex[TEXTURE_2D_ARRAY_INDEX];
|
||||
}
|
||||
return texImage;
|
||||
default:
|
||||
|
|
@ -2611,7 +2611,7 @@ _mesa_TexImage2D( GLenum target, GLint level, GLint internalFormat,
|
|||
1, border)) {
|
||||
/* when error, clear all proxy texture image parameters */
|
||||
if (texImage)
|
||||
clear_teximage_fields(ctx->Texture.Proxy2D->Image[0][level]);
|
||||
clear_teximage_fields(ctx->Texture.ProxyTex[TEXTURE_2D_INDEX]->Image[0][level]);
|
||||
}
|
||||
else {
|
||||
/* no error, set the tex image parameters */
|
||||
|
|
|
|||
|
|
@ -674,54 +674,32 @@ _mesa_update_texture( GLcontext *ctx, GLuint new_state )
|
|||
static GLboolean
|
||||
alloc_proxy_textures( GLcontext *ctx )
|
||||
{
|
||||
ctx->Texture.Proxy1D = (*ctx->Driver.NewTextureObject)(ctx, 0, GL_TEXTURE_1D);
|
||||
if (!ctx->Texture.Proxy1D)
|
||||
goto cleanup;
|
||||
static const GLenum targets[] = {
|
||||
GL_TEXTURE_1D,
|
||||
GL_TEXTURE_2D,
|
||||
GL_TEXTURE_3D,
|
||||
GL_TEXTURE_CUBE_MAP_ARB,
|
||||
GL_TEXTURE_RECTANGLE_NV,
|
||||
GL_TEXTURE_1D_ARRAY_EXT,
|
||||
GL_TEXTURE_2D_ARRAY_EXT
|
||||
};
|
||||
GLint tgt;
|
||||
|
||||
ctx->Texture.Proxy2D = (*ctx->Driver.NewTextureObject)(ctx, 0, GL_TEXTURE_2D);
|
||||
if (!ctx->Texture.Proxy2D)
|
||||
goto cleanup;
|
||||
ASSERT(Elements(targets) == NUM_TEXTURE_TARGETS);
|
||||
|
||||
ctx->Texture.Proxy3D = (*ctx->Driver.NewTextureObject)(ctx, 0, GL_TEXTURE_3D);
|
||||
if (!ctx->Texture.Proxy3D)
|
||||
goto cleanup;
|
||||
|
||||
ctx->Texture.ProxyCubeMap = (*ctx->Driver.NewTextureObject)(ctx, 0, GL_TEXTURE_CUBE_MAP_ARB);
|
||||
if (!ctx->Texture.ProxyCubeMap)
|
||||
goto cleanup;
|
||||
|
||||
ctx->Texture.ProxyRect = (*ctx->Driver.NewTextureObject)(ctx, 0, GL_TEXTURE_RECTANGLE_NV);
|
||||
if (!ctx->Texture.ProxyRect)
|
||||
goto cleanup;
|
||||
|
||||
ctx->Texture.Proxy1DArray = (*ctx->Driver.NewTextureObject)(ctx, 0, GL_TEXTURE_1D_ARRAY_EXT);
|
||||
if (!ctx->Texture.Proxy1DArray)
|
||||
goto cleanup;
|
||||
|
||||
ctx->Texture.Proxy2DArray = (*ctx->Driver.NewTextureObject)(ctx, 0, GL_TEXTURE_2D_ARRAY_EXT);
|
||||
if (!ctx->Texture.Proxy2DArray)
|
||||
goto cleanup;
|
||||
|
||||
assert(ctx->Texture.Proxy1D->RefCount == 1);
|
||||
for (tgt = 0; tgt < NUM_TEXTURE_TARGETS; tgt++) {
|
||||
if (!(ctx->Texture.ProxyTex[tgt]
|
||||
= ctx->Driver.NewTextureObject(ctx, 0, targets[tgt]))) {
|
||||
/* out of memory, free what we did allocate */
|
||||
while (--tgt >= 0) {
|
||||
ctx->Driver.DeleteTexture(ctx, ctx->Texture.ProxyTex[tgt]);
|
||||
}
|
||||
return GL_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
assert(ctx->Texture.ProxyTex[0]->RefCount == 1); /* sanity check */
|
||||
return GL_TRUE;
|
||||
|
||||
cleanup:
|
||||
if (ctx->Texture.Proxy1D)
|
||||
(ctx->Driver.DeleteTexture)(ctx, ctx->Texture.Proxy1D);
|
||||
if (ctx->Texture.Proxy2D)
|
||||
(ctx->Driver.DeleteTexture)(ctx, ctx->Texture.Proxy2D);
|
||||
if (ctx->Texture.Proxy3D)
|
||||
(ctx->Driver.DeleteTexture)(ctx, ctx->Texture.Proxy3D);
|
||||
if (ctx->Texture.ProxyCubeMap)
|
||||
(ctx->Driver.DeleteTexture)(ctx, ctx->Texture.ProxyCubeMap);
|
||||
if (ctx->Texture.ProxyRect)
|
||||
(ctx->Driver.DeleteTexture)(ctx, ctx->Texture.ProxyRect);
|
||||
if (ctx->Texture.Proxy1DArray)
|
||||
(ctx->Driver.DeleteTexture)(ctx, ctx->Texture.Proxy1DArray);
|
||||
if (ctx->Texture.Proxy2DArray)
|
||||
(ctx->Driver.DeleteTexture)(ctx, ctx->Texture.Proxy2DArray);
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -815,7 +793,7 @@ _mesa_init_texture(GLcontext *ctx)
|
|||
void
|
||||
_mesa_free_texture_data(GLcontext *ctx)
|
||||
{
|
||||
GLuint u;
|
||||
GLuint u, tgt;
|
||||
|
||||
/* unreference current textures */
|
||||
for (u = 0; u < MAX_TEXTURE_IMAGE_UNITS; u++) {
|
||||
|
|
@ -830,13 +808,8 @@ _mesa_free_texture_data(GLcontext *ctx)
|
|||
}
|
||||
|
||||
/* Free proxy texture objects */
|
||||
(ctx->Driver.DeleteTexture)(ctx, ctx->Texture.Proxy1D );
|
||||
(ctx->Driver.DeleteTexture)(ctx, ctx->Texture.Proxy2D );
|
||||
(ctx->Driver.DeleteTexture)(ctx, ctx->Texture.Proxy3D );
|
||||
(ctx->Driver.DeleteTexture)(ctx, ctx->Texture.ProxyCubeMap );
|
||||
(ctx->Driver.DeleteTexture)(ctx, ctx->Texture.ProxyRect );
|
||||
(ctx->Driver.DeleteTexture)(ctx, ctx->Texture.Proxy1DArray );
|
||||
(ctx->Driver.DeleteTexture)(ctx, ctx->Texture.Proxy2DArray );
|
||||
for (tgt = 0; tgt < NUM_TEXTURE_TARGETS; tgt++)
|
||||
ctx->Driver.DeleteTexture(ctx, ctx->Texture.ProxyTex[tgt]);
|
||||
|
||||
|
||||
#if FEATURE_colortable
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue