Я пытаюсь сделать полноэкранный квад в качестве вспомогательных плиток.Причина этого в том, что шейдер GLSL, который я запускаю, может занять некоторое время (до 10 секунд).Несмотря на то, что 10 секунд рассчитаны, тайм-аут видеодрайвера может (или (если тайм-аут TDR отключен), приложение будет зависать на 10 секунд.
Я думал, что смогу разбить полноэкранный квад на несколько фрагментов).,Каждый из них рендерится быстрее и не блокирует приложение.
У меня проблема в том, как вызвать glTexCoord2f и glVertex2f в цикле плитки.Пример кода из цикла;
xtilesize - это ширина изображения, деленная на количество плиток (xtiles). Я хочу отобразить квадратик, так как ytilesize - это высота изображения, деленная на количество плиток (ytiles), которые я хочувизуализировать квад как
for yloop:=0 to ytiles-1 do
begin
for xloop:=0 to xtiles-1 do
begin
glviewport(xloop*xtilesize,yloop*ytilesize,xloop*xtilesize+xtilesize,yloop*ytilesize+ytilesize);
glBegin(GL_QUADS);
//tex coords - extents are (0,0) to (1,1)
tilewidth:=1/xtiles;
tileheight:=1/ytiles;
x1:=xloop*tilewidth;
y1:=yloop*tileheight;
x2:=x1+tilewidth;
y2:=y1+tileheight;
//vertex - extents are (-1,-1) to (1,1)
//but for testing make them -0.9 to 0.9 - this gives a border around them to see how they are rendered
x3:=-0.9;
y3:=-0.9;
x4:=0.9;
y4:=0.9;
glTexCoord2f(x1,y1); glVertex2f(x3,y3);
glTexCoord2f(x2,y1); glVertex2f(x4,y3);
glTexCoord2f(x2,y2); glVertex2f(x4,y4);
glTexCoord2f(x1,y2); glVertex2f(x3,y4);
glEnd;
end;
end;
The GLSL shaders are very simple;
Вершинный шейдер
void main()
{
gl_Position = ftransform();
}
Фрагментный шейдер
#version 400
uniform vec2 resolution;
void main(void)
{
gl_FragColor = vec4(1-gl_FragCoord.x/resolution.x,gl_FragCoord.y/resolution.y,1,0);
}
Вот проблема.Если я установлю xtiles и ytiles на 1, то на выходе получится один квад.Заштрихованный прямоугольник показан в пределах границы размера 0,1, то есть
https://ibb.co/2kHPWNb
Если я увеличу количество плиток X и Y до 2, то вспомогательные плитки будут немного больше, чем ониследует, чтобы они проходили мимо краев, т. е.
https://ibb.co/JrLvCvT
и для 3-х субплит
https://ibb.co/MVyvQRQ
и для 5-ти suub плиток
https://ibb.co/XXVRqZn
Что мне здесь не хватает?Как надежно разделить полноэкранный квад на несколько плиток?Я, должно быть, упускаю что-то очевидное, но я просто не могу заставить это работать.