added _mesa_texstore_z24_s8()

This commit is contained in:
Brian Paul
2005-10-01 16:08:27 +00:00
parent b0a0ca8bd9
commit 184a970722
+40 -8
View File
@@ -1936,6 +1936,33 @@ _mesa_texstore_ycbcr(STORE_PARAMS)
/**
* Store a combined depth/stencil texture image.
*/
GLboolean
_mesa_texstore_z24_s8(STORE_PARAMS)
{
ASSERT(dstFormat == &_mesa_texformat_z24_s8);
ASSERT(srcFormat == GL_DEPTH_STENCIL_EXT);
ASSERT(srcType == GL_UNSIGNED_INT_24_8_EXT);
if (!ctx->_ImageTransferState &&
!srcPacking->SwapBytes) {
memcpy_texture(ctx, dims,
dstFormat, dstAddr, dstXoffset, dstYoffset, dstZoffset,
dstRowStride, dstImageStride,
srcWidth, srcHeight, srcDepth, srcFormat, srcType,
srcAddr, srcPacking);
}
else {
_mesa_problem(ctx, "_mesa_texstore_z24_s8 not finished");
}
return GL_TRUE;
}
/**
* Store an image in any of the formats:
@@ -4021,16 +4048,16 @@ _mesa_get_teximage(GLcontext *ctx, GLenum target, GLint level,
/* Can't use FetchTexel here because that returns RGBA */
if (texImage->TexFormat->IndexBits == 8) {
const GLubyte *src = (const GLubyte *) texImage->Data;
src += width * (img * texImage->Height + row);
for (col = 0; col < width; col++) {
indexRow[col] = src[texImage->Width *
(img * texImage->Height + row) + col];
indexRow[col] = src[col];
}
}
else if (texImage->TexFormat->IndexBits == 16) {
const GLushort *src = (const GLushort *) texImage->Data;
src += width * (img * texImage->Height + row);
for (col = 0; col < width; col++) {
indexRow[col] = src[texImage->Width *
(img * texImage->Height + row) + col];
indexRow[col] = src[col];
}
}
else {
@@ -4051,6 +4078,15 @@ _mesa_get_teximage(GLcontext *ctx, GLenum target, GLint level,
_mesa_pack_depth_span(ctx, width, dest, type,
depthRow, &ctx->Pack);
}
else if (format == GL_DEPTH_STENCIL_EXT) {
/* XXX Note: we're bypassing texImage->FetchTexel()! */
const GLuint *src = (const GLuint *) texImage->Data;
src += width * row + width * height * img;
_mesa_memcpy(dest, src, width * sizeof(GLuint));
if (ctx->Pack.SwapBytes) {
_mesa_swap4((GLuint *) dest, width);
}
}
else if (format == GL_YCBCR_MESA) {
/* No pixel transfer */
const GLint rowstride = texImage->RowStride;
@@ -4069,10 +4105,6 @@ _mesa_get_teximage(GLcontext *ctx, GLenum target, GLint level,
_mesa_swap2((GLushort *) dest, width);
}
}
else if (format == GL_DEPTH_STENCIL_EXT) {
/* XXX special case */
}
else {
/* general case: convert row to RGBA format */
GLfloat rgba[MAX_WIDTH][4];