glProgramStringARB che causa GL_INVALID_OPERATION & # 8230; o Aiuto con i programmi di frammentazione

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

  •  19-08-2019
  •  | 
  •  

Domanda

Sto cercando di scrivere un programma per frammenti che prenderà una trama e fisserà i texel tra due valori. Cioè, se il valore minimo è 0,2 e il valore massimo è 0,6, qualsiasi texel inferiore a 0,2 diventerà 0, qualsiasi texel maggiore di 0,6 diventerà 1,0 e tutti i valori tra saranno mappati da 0 a 1,0.

La mia chiamata a glProgramStringARB è causa di GL_INVALID_OPERATION. Non riesco a capire perché questo stia accadendo. Per favore aiutate.

Questo è il mio primo tentativo di scrivere uno shader, quindi non sono del tutto sicuro di quello che sto facendo. Ecco il mio codice:

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);

Quindi per usarlo faccio quanto segue:

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);
È stato utile?

Soluzione

Non ho davvero programmato alcun shader, ma forse il compilatore shader non riconosce la nuova riga? hai provato a mettere " \ n \ r " ;?

EDIT:

Un'altra domanda che potresti farti è quale lingua stai usando? Le stringhe sono in UNICODE, ovvero 16 bit / carattere? Ho appena notato che il formato che stai passando in glProgramStringARB () è impostato su ASCII. Se la stringa è davvero UNICODE, allora causerà problemi.

Ad esempio, le stringhe JAVA e C # sono in UNICODE. non ASCII.

Altri suggerimenti

Primo: non so molto su ARB_fragment_program, quindi in parte indovino qui.

La tua migliore opzione sarebbe quella di ottenere la stringa di errore (glGetString (GL_PROGRAM_ERROR_STRING_ARB)) e vedere cosa ti dice.

Dopo aver visto lo shader, sembra che tu stia utilizzando il numero errato di componenti nelle righe 3 e 7 (e probabilmente un po 'di più). Ad esempio, non penso che tu possa assegnare un vettore a 4 componenti (fragment.texcoord [1]) a un campo scalare (R0.x).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top