glProgramStringARB provoquant GL_INVALID_OPERATION & # 8230; ou l'aide sur les programmes de fragments

StackOverflow https://stackoverflow.com/questions/339042

  •  19-08-2019
  •  | 
  •  

Question

J'essaie d'écrire un programme fragment qui prendra une texture et fixera les texels entre deux valeurs. Autrement dit, si la valeur minimale est égale à 0,2 et la valeur maximale égale à 0,6, tout texel inférieur à 0,2 deviendra 0, tout texel supérieur à 0,6 deviendra 1,0 et toutes les valeurs entre celles-ci seront mappées de 0 à 1,0.

Mon appel à glProgramStringARB est la cause de GL_INVALID_OPERATION. Je n'arrive pas à comprendre pourquoi cela se produit. S'il vous plaît aider.

Ceci est ma première tentative d’écriture d’un shader, je ne suis donc pas tout à fait sûr de ce que je fais. Voici mon code:

String str = 
   "!!ARBfp1.0\n"+            
   "TEMP R0;\n"+
   "MOV R0.x, fragment.texcoord[1];\n"+
   "ADD R0.w, fragment.texcoord[2].x, -R0.x;\n"+
   "TEX R0.xyz, fragment.texcoord[0], texture[0], 2D;\n"+
   "RCP R0.w, R0.w;\n"+
   "ADD R0.xyz, R0, -fragment.texcoord[1].x;\n"+
   "MUL_SAT result.color.xyz, R0, R0.w;\n"+
   "END\n";

int count = str.Length;

Gl.glEnable(Gl.GL_FRAGMENT_PROGRAM_ARB);
Gl.glGenProgramsARB(1, out mFragProg);            
Gl.glBindProgramARB(Gl.GL_FRAGMENT_PROGRAM_ARB, mFragProg);
Gl.glProgramStringARB(Gl.GL_FRAGMENT_PROGRAM_ARB,  Gl.GL_PROGRAM_FORMAT_ASCII_ARB, count, str);
GetGLError("glProgramStringARB");
Gl.glDisable(Gl.GL_FRAGMENT_PROGRAM_ARB);

Ensuite, pour l'utiliser, je fais ce qui suit:

Gl.glEnable(Gl.GL_FRAGMENT_PROGRAM_ARB);
Gl.glBindProgramARB(Gl.GL_FRAGMENT_PROGRAM_ARB, mFragProg);
float max = (mMiddle + (mRange / 2.0f))/65535.0f;
float min = (mMiddle - (mRange / 2.0f))/65535.0f;
Gl.glMultiTexCoord1f(Gl.GL_TEXTURE1_ARB, min);
Gl.glMultiTexCoord1f(Gl.GL_TEXTURE2_ARB, max);
GetGLError("Enable Program for Drawing");

/* 
 * Drawing Code
 */

Gl.glDisable(Gl.GL_FRAGMENT_PROGRAM_ARB);
Était-ce utile?

La solution

Je n'ai pas vraiment programmé de shaders, mais peut-être que le compilateur de shader ne reconnaît pas la nouvelle ligne? avez-vous essayé de mettre "\ n \ r"?

EDIT:

Une autre question que vous pouvez vous poser est la suivante: quelle langue utilisez-vous? Les chaînes sont-elles dans UNICODE, c'est-à-dire 16 bits / car? Je viens de remarquer que le format que vous passez dans le fichier glProgramStringARB () est défini sur ASCII. Si la chaîne est vraiment UNICODE, cela posera des problèmes.

Par exemple, les chaînes JAVA et C # sont en UNICODE. pas ASCII.

Autres conseils

Tout d'abord: je ne connais pas grand chose au sujet d'ARB_fragment_program, je vais donc en partie deviner.

Votre meilleure option serait d'obtenir la chaîne d'erreur (glGetString (GL_PROGRAM_ERROR_STRING_ARB)) et de voir ce que cela vous dit.

Après avoir examiné le shader, vous semblez utiliser le mauvais nombre de composants dans les lignes 3 et 7 (et probablement un peu plus). Par exemple, je ne pense pas que vous puissiez affecter un vecteur à 4 composantes (fragment.texcoord [1]) à un champ scalaire (R0.x).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top