On 04/06/06, Ivan Gyurdiev ivg2@cornell.edu wrote:
Well, it seems to store a bit more than that. If I create pshaders A,B, and vshaders C,D, and do: set_pixel(A); set_vertex(C); draw_stuff(); set_pixel(B); set_vertex(D); draw_stuff(); set_pixel(NULL), set_vertex(NULL)
Won't this create...5 different programs, all kept in memory for the entire lifetime of the program, while we only need 2 [1 active]? (A, NULL), (A,C), (B,C), (B,D), (NULL, D)
I think it should be possible to change the code in such a way that the programs are only created once they're actually used.
Also, is it necessary to store link pair info in both shaders - isn't this redundant somehow?
Well, yes. When a shader is released, the programs it's linked to should be destroyed. However, it's probably not neccesary to point to the other shader. We could probably just link to a program struct that contains the program id and a list of linked shaders. It doubt it will make much of a difference wrt amount of memory used though, at least not as long as there are only two shaders involved. On the other hand, for d3d10 we'll also need geometry / primitive shaders.