[SDL2 OpenGles2] pobranie zmiennej z shadera
Ostatnio zmodyfikowano 2023-01-07 21:49
tBane Temat założony przez niniejszego użytkownika |
[SDL2 OpenGles2] pobranie zmiennej z shadera » 2023-01-07 14:16:49 Witam. Pisze program w C++ oraz OpenGLES 2. Potrzebuje uzyskac dostep do zmiennej w shaderze Sampler 2D texture tak, aby moc ja dowolnie zmieniac z poziomu C++ Shader: const char * solidColorShader = "precision mediump float;\n" "varying vec4 vcolor;\n" "void main()\n" "{\n" "gl_FragColor = vec4(vcolor.xyz, 1.0);\n" "}";
const char * textureShader = "precision mediump float;\n" "uniform sampler2D texture;\n" "void main()\n" "{\n" "gl_FragColor = texture;\n" "}";
C++: GLuint vertex; GLuint solidColor; GLuint texture;
vertex = glCreateShader( GL_VERTEX_SHADER ); solidColor = glCreateShader( GL_FRAGMENT_SHADER ); texture = glCreateShader( GL_FRAGMENT_SHADER );
solidColorProgram = glCreateProgram(); glAttachShader( solidColorProgram, vertex ); glAttachShader( solidColorProgram, solidColor );
textureProgram = glCreateProgram(); glAttachShader( textureProgram, vertex ); glAttachShader( textureProgram, texture );
Teraz chcialbym moc edytowac teksture Sampler 2D texture. Probowalem w ten sposob, ale nic z tego :-/ Ma ktos pomysl? Moge sie mylic z calym procesem tworzenia shadera, ale lece z poradnika a w necie pustki. Mysle, ze w ten sposob tzn. pobieranie zmiennej (dostep do niej) daje najwieksze pole do manewrow, bo wtedy moglbym podpinac rozne tekstury i lepiej zrozumialbym dzialanie shaderow. Szukam czegos w ten desen GL_SAMPLER_2D tex = glGetAttribLocation( textureProgram, "texture" );
|
|
DejaVu |
» 2023-01-07 17:37:38 Odpowiedź z ChatGPT: Pisze program w C++ oraz OpenGLES 2. Potrzebuje uzyskac dostep do zmiennej w shaderze Sampler 2D texture tak, aby moc ja dowolnie zmieniac z poziomu C++Aby uzyskać dostęp do zmiennej Sampler 2D w shaderze z poziomu aplikacji napisanej w C++ i korzystającej z OpenGL ES 2, musisz najpierw pobrać indeks tej zmiennej za pomocą funkcji glGetUniformLocation. Następnie, aby zmienić wartość tej zmiennej, możesz wywołać funkcję glUniform1i, przekazując indeks zmiennej i nową wartość. Oto przykład kodu C++, który ilustruje tę procedurę: GLint textureUniformLocation = glGetUniformLocation( shaderProgram, "texture" );
glUniform1i( textureUniformLocation, 3 ); Pamiętaj, że aby ta operacja zadziałała poprawnie, musisz najpierw zbindować odpowiedni obiekt tekstury za pomocą funkcji glBindTexture. W przykładzie powyżej zakładamy, że obiekt tekstury został wcześniej zbindowany do jednostki teksturującej o numerze 3. |
|
pekfos |
» 2023-01-07 18:39:32 Odpowiedź z ChatGPT: Coraz trudniej o wymówkę, czemu się samemu tego nie znalazło. |
|
tBane Temat założony przez niniejszego użytkownika |
» 2023-01-07 21:49:11 Ok. Namówiłeś mnie będę korzystał z tego narzędzia :-).
problem rozwiązany, dziękuję i pozdrawiam |
|
« 1 » |