Просмотр исходного кода

swrast: use Map/UnmapTextureImage() in framebuffer map/unmap code

When we're actually rendering into a texture, map the texture image
instead of the corresponding renderbuffer.  Before, we just copied
a pointer from the texture image to the renderbuffer.  This change
will make the code usable by hardware drivers.
tags/i965-primitive-restart-v2
Brian Paul 13 лет назад
Родитель
Сommit
1caf698191
1 измененных файлов: 13 добавлений и 15 удалений
  1. 13
    15
      src/mesa/swrast/s_renderbuffer.c

+ 13
- 15
src/mesa/swrast/s_renderbuffer.c Просмотреть файл

@@ -565,20 +565,16 @@ map_attachment(struct gl_context *ctx,
struct swrast_renderbuffer *srb = swrast_renderbuffer(rb);

if (texObj) {
/* map texture image (render to texture) */
const GLuint level = fb->Attachment[buffer].TextureLevel;
const GLuint face = fb->Attachment[buffer].CubeMapFace;
const GLuint slice = fb->Attachment[buffer].Zoffset;
struct gl_texture_image *texImage = texObj->Image[face][level];
if (texImage) {
struct swrast_texture_image *swImage
= swrast_texture_image(texImage);

/* XXX we'll eventually call _swrast_map_teximage() here */
swImage->Map = swImage->Buffer;
if (srb) {
srb->Map = swImage->Buffer;
srb->RowStride = swImage->RowStride *
_mesa_get_format_bytes(swImage->Base.TexFormat);
}
ctx->Driver.MapTextureImage(ctx, texImage, slice,
0, 0, texImage->Width, texImage->Height,
GL_MAP_READ_BIT | GL_MAP_WRITE_BIT,
&srb->Map, &srb->RowStride);
}
}
else if (rb) {
@@ -587,8 +583,9 @@ map_attachment(struct gl_context *ctx,
0, 0, rb->Width, rb->Height,
GL_MAP_READ_BIT | GL_MAP_WRITE_BIT,
&srb->Map, &srb->RowStride);
assert(srb->Map);
}

assert(srb->Map);
}

@@ -602,14 +599,15 @@ unmap_attachment(struct gl_context *ctx,
struct swrast_renderbuffer *srb = swrast_renderbuffer(rb);

if (texObj) {
/* unmap texture image (render to texture) */
const GLuint level = fb->Attachment[buffer].TextureLevel;
const GLuint face = fb->Attachment[buffer].CubeMapFace;
const GLuint slice = fb->Attachment[buffer].Zoffset;
struct gl_texture_image *texImage = texObj->Image[face][level];
if (texImage) {

/* XXX we'll eventually call _swrast_unmap_teximage() here */
}
}
ctx->Driver.UnmapTextureImage(ctx, texImage, slice);
}
}
else if (rb) {
/* unmap ordinary renderbuffer */
ctx->Driver.UnmapRenderbuffer(ctx, rb);

Загрузка…
Отмена
Сохранить