Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SDL2 OpenGles2] pobranie zmiennej z shadera

Ostatnio zmodyfikowano 2023-01-07 21:49
Autor Wiadomość
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:
C/C++
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"
// tu musze naprawic :D
"}";

C++:
C/C++
// SHADERS
GLuint vertex;
GLuint solidColor;
GLuint texture;

// CREATE SHADERS
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
C/C++
GL_SAMPLER_2D tex = glGetAttribLocation( textureProgram, "texture" );
P-179852
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ę:
C/C++
// Pobierz indeks zmiennej Sampler 2D o nazwie "texture"
GLint textureUniformLocation = glGetUniformLocation( shaderProgram, "texture" );

// Zmień wartość tej zmiennej na 3
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.
P-179853
pekfos
» 2023-01-07 18:39:32
Odpowiedź z ChatGPT:
Coraz trudniej o wymówkę, czemu się samemu tego nie znalazło.
P-179854
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
P-179855
« 1 »
  Strona 1 z 1