Merge branch 'gallium-0.1' into gallium-tex-surfaces

This commit is contained in:
Brian Paul 2008-05-20 13:39:27 -06:00
commit 479174c398
5 changed files with 40 additions and 13 deletions

View File

@ -28,6 +28,7 @@ static GLfloat Zpos = -1.0;
static float Xzoom, Yzoom;
static GLboolean DrawFront = GL_FALSE;
static GLboolean Dither = GL_TRUE;
static int win = 0;
static void Reset( void )
@ -215,6 +216,7 @@ static void Key( unsigned char key, int x, int y )
printf("glDrawBuffer(%s)\n", DrawFront ? "GL_FRONT" : "GL_BACK");
break;
case 27:
glutDestroyWindow(win);
exit(0);
break;
}
@ -343,7 +345,7 @@ int main( int argc, char *argv[] )
else
glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE);
glutCreateWindow(argv[0]);
win = glutCreateWindow(argv[0]);
Init(ciMode, filename);
Usage();

View File

@ -164,14 +164,16 @@ static struct st_fragment_program *
make_fragment_shader_z(struct st_context *st)
{
GLcontext *ctx = st->ctx;
/* only make programs once and re-use */
static struct st_fragment_program *stfp = NULL;
struct gl_program *p;
GLuint ic = 0;
if (stfp)
return stfp;
if (st->drawpix.z_shader) {
return st->drawpix.z_shader;
}
/*
* Create shader now
*/
p = ctx->Driver.NewProgram(ctx, GL_FRAGMENT_PROGRAM_ARB, 0);
if (!p)
return NULL;
@ -213,10 +215,10 @@ make_fragment_shader_z(struct st_context *st)
p->OutputsWritten = (1 << FRAG_RESULT_COLR) | (1 << FRAG_RESULT_DEPR);
p->SamplersUsed = 0x1; /* sampler 0 (bit 0) is used */
stfp = (struct st_fragment_program *) p;
st_translate_fragment_program(st, stfp, NULL);
st->drawpix.z_shader = (struct st_fragment_program *) p;
st_translate_fragment_program(st, st->drawpix.z_shader, NULL);
return stfp;
return st->drawpix.z_shader;
}
@ -228,16 +230,17 @@ make_fragment_shader_z(struct st_context *st)
static struct st_vertex_program *
st_make_passthrough_vertex_shader(struct st_context *st, GLboolean passColor)
{
/* only make programs once and re-use */
static struct st_vertex_program *progs[2] = { NULL, NULL };
GLcontext *ctx = st->ctx;
struct st_vertex_program *stvp;
struct gl_program *p;
GLuint ic = 0;
if (progs[passColor])
return progs[passColor];
if (st->drawpix.vert_shaders[passColor])
return st->drawpix.vert_shaders[passColor];
/*
* Create shader now
*/
p = ctx->Driver.NewProgram(ctx, GL_VERTEX_PROGRAM_ARB, 0);
if (!p)
return NULL;
@ -293,7 +296,7 @@ st_make_passthrough_vertex_shader(struct st_context *st, GLboolean passColor)
stvp = (struct st_vertex_program *) p;
st_translate_vertex_program(st, stvp, NULL);
progs[passColor] = stvp;
st->drawpix.vert_shaders[passColor] = stvp;
return stvp;
}
@ -1075,3 +1078,15 @@ void st_init_drawpixels_functions(struct dd_function_table *functions)
functions->DrawPixels = st_DrawPixels;
functions->CopyPixels = st_CopyPixels;
}
void
st_destroy_drawpix(struct st_context *st)
{
st_reference_fragprog(st, &st->drawpix.z_shader, NULL);
st_reference_fragprog(st, &st->pixel_xfer.combined_prog, NULL);
st_reference_vertprog(st, &st->drawpix.vert_shaders[0], NULL);
st_reference_vertprog(st, &st->drawpix.vert_shaders[1], NULL);
}

View File

@ -32,5 +32,8 @@
extern void st_init_drawpixels_functions(struct dd_function_table *functions);
extern void
st_destroy_drawpix(struct st_context *st);
#endif /* ST_CB_DRAWPIXELS_H */

View File

@ -168,6 +168,7 @@ static void st_destroy_context_priv( struct st_context *st )
st_destroy_bitmap(st);
st_destroy_blit(st);
st_destroy_clear(st);
st_destroy_drawpix(st);
_vbo_DestroyContext(st->ctx);

View File

@ -155,6 +155,12 @@ struct st_context
struct bitmap_cache *cache;
} bitmap;
/** for glDraw/CopyPixels */
struct {
struct st_fragment_program *z_shader;
struct st_vertex_program *vert_shaders[2];
} drawpix;
/** for glClear */
struct {
struct pipe_shader_state vert_shader;