IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

error c5041: cannot locate suitable resource to bind variable Possibly large array


Sujet :

OpenGL

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2015
    Messages : 9
    Points : 3
    Points
    3
    Par défaut error c5041: cannot locate suitable resource to bind variable Possibly large array
    Salut,
    J'ai un petit probléme avec GLSL (Shader)
    un message d'erreur s'affiche ( error c5041: cannot locate suitable resource to bind variable Possibly large array)
    Qui peut me donner une solution ?

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Pouvons nous voir votre shader et si possible, la ligne de l'erreur, merci.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 379
    Points
    11 379
    Billets dans le blog
    10
    Par défaut
    Salut !

    On ne peut pas t'aider car on n'a pas le code du shader incriminé.
    Je pense seulement que tu as une variable uniforme de type tableau trop grosse (4096 éléments de 4 octets pour un UBO si je me souviens bien).
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  4. #4
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2015
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Bonjour a tous,
    Merci de me répondre.
    Le code du Vertex Shader le voila :

    Code glsl : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    #version 450
    #pragma optionNV(unroll all)
    #pragma optionNV(fastmath on)
    #pragma optionNV(fastprecision on)
    #pragma optionNV(ifcvt none)
    #pragma optionNV(inline all)
    #pragma optionNV(strict on)
     
    uniform vec3 LightPosition, CameraPosition;
    uniform mat4x4 LightTextureMatrices[250];
    uniform mat4 gl_ModelViewProjectionMatrix;
     
    out vec3 LightDirection, LightDirectionReflected, CameraDirection, Normal;
    out vec4 ShadowTexCoord[250];
    in vec4 gl_Vertex;
    in vec3 gl_Normal;
    vec4 gl_TexCoord[];
    in vec4 gl_MultiTexCoord0;
     
    void main()
    {
    	LightDirection = LightPosition - gl_Vertex.xyz;
    	LightDirectionReflected = reflect(-LightDirection, gl_Normal);
    	LightDirectionReflected = vec3(0,0,0);
    	CameraDirection = CameraPosition - gl_Vertex.xyz;
    	Normal = gl_Normal;
    	gl_TexCoord[0] = gl_MultiTexCoord0;
    	for(int i = 0; i < 81; i++)
    	ShadowTexCoord[i] = LightTextureMatrices[i] * gl_Vertex;
     
    	gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
    }


    Le code de fragment shader le voila :

    Code glsl : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    #version 450
    #pragma optionNV(unroll all)
    #pragma optionNV(unroll count=81)
    #pragma optionNV(fastmath on)
    #pragma optionNV(fastprecision on)
    #pragma optionNV(ifcvt none)
    #pragma optionNV(inline all)
    #pragma optionNV(strict on)
     
    #extension GL_EXT_texture_array : enable
    #extension GL_EXT_gpu_shader4 : enable
     
    uniform sampler2D Texture;
    uniform sampler2DArrayShadow ShadowMap;
     
    in vec3 LightDirection, LightDirectionReflected, CameraDirection, Normal;
    in vec4 ShadowTexCoord[30];
    out vec4 gl_FragColor;
    vec4 gl_TexCoord[];
     
    void main(void)
    {
    	float Shadow = 0.0;
     
    	for(int i = 0; i < 29; i++)
    	{
    		Shadow += shadow2DArray(ShadowMap, vec4(ShadowTexCoord[i].xy / ShadowTexCoord[i].w, i, ShadowTexCoord[i].z / ShadowTexCoord[i].w)).r;
    	}
     
    	Shadow /= 29.0;
     
     
    	float NdotLD = max(dot(normalize(LightDirection), Normal), 0.0) * Shadow;
    	float Spec = pow(max(dot(normalize(LightDirectionReflected), normalize(CameraDirection)), 0.0), 32.0) * Shadow;
     
     
    	gl_FragColor = vec4(texture2D(Texture, gl_TexCoord[0].st).rgb * ( NdotLD ), 1.0);
     
    }

    Le probléme ce situe au niveaux du fragment shader dans cette ligne :
    Code glsl : Sélectionner tout - Visualiser dans une fenêtre à part
    in vec4 ShadowTexCoord[30];
    moi j'ai besoin de ShadowTexCoord[81] et non pas ShadowTexCoord[30];
    et meme problème dans la boucle :
    Code glsl : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(int i = 0; i < 29; i++)
    	{
    		Shadow += shadow2DArray(ShadowMap, vec4(ShadowTexCoord[i].xy / ShadowTexCoord[i].w, i, ShadowTexCoord[i].z / ShadowTexCoord[i].w)).r;
    	}
    moi j'ai besoin de for(int i = 0; i < 81; i++) et pas for(int i = 0; i < 29; i++)
    Merci .

  5. #5
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 379
    Points
    11 379
    Billets dans le blog
    10
    Par défaut
    En sortie du vertex shader tu as out vec4 ShadowTexCoord[250]; et en entrée de ton fragment shader tu as in vec4 ShadowTexCoord[30];.
    Commence déjà par choisir si tu en veux 250 ou 30.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  6. #6
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2015
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par dragonjoker59 Voir le message
    En sortie du vertex shader tu as out vec4 ShadowTexCoord[250]; et en entrée de ton fragment shader tu as in vec4 ShadowTexCoord[30];.
    Commence déjà par choisir si tu en veux 250 ou 30.
    Merci pour ta réponse , je veut 250 .

  7. #7
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 379
    Points
    11 379
    Billets dans le blog
    10
    Par défaut
    Donc fais le changement en conséquence (remplacer 30 par 250?) et vois si cela résout ton problème.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  8. #8
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2015
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par dragonjoker59 Voir le message
    Donc fais le changement en conséquence (remplacer 30 par 250?) et vois si cela résout ton problème.
    Merci, oui oui je l'ai fait mais toujours le même probléme : " error c5041: cannot locate suitable resource to bind variable Possibly large array" au niveau de mon fragment shader ligne 17.

  9. #9
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 379
    Points
    11 379
    Billets dans le blog
    10
    Par défaut
    Et donc cela pointe le problème que je supposais, c'est à dire une variable uniforme trop grosse. Il faut donc que tu revoies ta structure de données.
    La première chose qui m'interpelle est le nombre de sources lumineuses (250 ? Elles ont toutes une influence discernable sur ton objet ?). Dans mon moteur je passe par une texture 1D pour stocker les lumières, ce qui m'enlève une épine du pied.
    De plus tu peux faire le calcul de ShadowTexCoord directement dans le fragment shader, ce qui t'apportera en plus une meilleure précision, contre, il est vrai, une perte de performances.
    Du coup tu n'aurais plus que deux variables uniformes (au lieu de ton tableau de 250) : Le sampler1D et le compte des lumières qu'il contient.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  10. #10
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2015
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Merci pour ta réponse je vais essayé de faire de tes conseils.

Discussions similaires

  1. [STRUTS] [Debutant] Cannot find message resources...
    Par grizzz dans le forum Struts 1
    Réponses: 14
    Dernier message: 05/05/2011, 16h08
  2. Cannot locate resource ogrehead.mesh
    Par AYNIL dans le forum Ogre
    Réponses: 2
    Dernier message: 29/03/2011, 13h24
  3. Réponses: 2
    Dernier message: 06/04/2007, 15h04
  4. Encore un problème de locate de resources
    Par zegreg dans le forum Langage
    Réponses: 5
    Dernier message: 19/12/2006, 17h27
  5. Réponses: 3
    Dernier message: 26/10/2006, 18h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo