New ctx->Driver.Map/UnmapTexture() functions for accessing textures from t_vb_program.c

This commit is contained in:
Brian
2007-11-29 08:12:33 -07:00
parent a2ab143b75
commit 61fbc81657
4 changed files with 56 additions and 1 deletions

View File

@@ -245,6 +245,50 @@ init_machine(GLcontext *ctx, struct gl_program_machine *machine)
}
/**
* Map the texture images which the vertex program will access (if any).
*/
static void
map_textures(GLcontext *ctx, const struct gl_vertex_program *vp)
{
GLuint u;
if (!ctx->Driver.MapTexture)
return;
for (u = 0; u < ctx->Const.MaxVertexTextureImageUnits; u++) {
if (vp->Base.TexturesUsed[u]) {
/* Note: _Current *should* correspond to the target indicated
* in TexturesUsed[u].
*/
ctx->Driver.MapTexture(ctx, ctx->Texture.Unit[u]._Current);
}
}
}
/**
* Unmap the texture images which were used by the vertex program (if any).
*/
static void
unmap_textures(GLcontext *ctx, const struct gl_vertex_program *vp)
{
GLuint u;
if (!ctx->Driver.MapTexture)
return;
for (u = 0; u < ctx->Const.MaxVertexTextureImageUnits; u++) {
if (vp->Base.TexturesUsed[u]) {
/* Note: _Current *should* correspond to the target indicated
* in TexturesUsed[u].
*/
ctx->Driver.UnmapTexture(ctx, ctx->Texture.Unit[u]._Current);
}
}
}
/**
* This function executes vertex programs
*/
@@ -278,6 +322,8 @@ run_vp( GLcontext *ctx, struct tnl_pipeline_stage *stage )
}
}
map_textures(ctx, program);
for (i = 0; i < VB->Count; i++) {
GLuint attr;
@@ -329,6 +375,8 @@ run_vp( GLcontext *ctx, struct tnl_pipeline_stage *stage )
#endif
}
unmap_textures(ctx, program);
/* Fixup fog and point size results if needed */
if (program->IsNVProgram) {
if (ctx->Fog.Enabled &&