[glsl] Vertex Texture Fetching + 6600GT => performance?
j'ai un probleme de performance quand j'essaye de fetch le contenu d'une texture dans un vertex shader.
sur une 6600 GT (mon matériel), je passe de 1kfps (capé à 1k par la résolution de SDL_getticks()) à 5fps.
le shader ne fait que 3 soustractions :aie:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| uniform sampler2D hMap;
void main(void)
{
vec4 dv;
vec4 v = vec4(gl_Vertex);
float df;
dv = texture2D(hMap, gl_MultiTexCoord0.st);
//a de fault de heightmap potable
//je recupere la composante rouge de ma texture.
df = dv.r;
v.x -= df;
v.y -= df;
v.z -= df;
gl_Position = gl_ModelViewProjectionMatrix * v;
gl_TexCoord[0].xy = gl_MultiTexCoord0.xy;
} |
cela marche nickel sur une 8800 (sur 1000fps, pas un seul en moins ... en affichant 5120 vertex).
mon GPU est shader 3.0 dixit le site de nvidia
Citation:
Envoyé par nvidia.fr
Les GPU NVIDIA GeForce 6600 sont les premiers à proposer des performances maximales, ils prennent en charge le SLI Multi-GPU et les fonctions Shader Model 3.0 à des prix abordables.
et qui dis shader 3.0 dis possibilité de fetch au moins 4 unités de texture dans le vertex shader.
je rajoute que je suis sous linux et que ma config marche sans soucis sur des jeux plutôt récent comme quake4.
---
pour la petite histoire (y'as toujours des curieux :mrgreen:):
j'essaye de coller du relief sur une geodesic sphere avec une heightmap en utilisant les shaders.
je met mon heightmap dans mon unité de texture 1, et je module le rayon centre de la sphere - vertex par la valeur stocké dans la texture.
ça semble marcher correctement (me faudrais une heightmap correcte pour être sur) et donner des résultats digne d'intérêt sur du matériel récent :)