Saya pikir saya sudah membuatnya berfungsi tetapi saya masih tidak tahu cara mengubah nilai di vertex shader saya. Apa yang saya lakukan di opengl adalah sebagai berikut, untuk setiap render:
//i bind my shader
shader.bind();
// Then trying to set the value in my vertex shader like so:
GLuint test = glGetUniformLocation(shader.id(), "Test");
glUniform1f(test, 6.0f);
// Do some other stuff like rendering an object
// ...
// then unbind shader
shader.unbind();
Ini adalah nilai yang ingin saya ubah di vertex shader saya:
uniform float Test = 0.66; // Doesn't work
//const float Test = 0.66; // Works
Tetapi shader saya tidak berfungsi ketika saya mencobanya, itu membuat objek saya menjadi hitam.
Jika saya mengomentari bagian glGetUniform(Location) dan jika menggunakan float sebagai const alih-alih < kuat>seragam maka shader saya berfungsi dengan baik. Tapi saya ingin bisa mengubah nilai shader saya di setiap render. Kupikir aku harus menggunakan seragam untuk itu...?
Apakah ada sesuatu yang saya lewatkan..??
EDIT:
Tampaknya saya mendapatkan kesalahan GLSL berikut:
ekspresi tidak konstan dalam inisialisasi
Jadi harus konstan agar bisa berfungsi... Apakah itu berarti tidak ada cara untuk menjadikan ini sebagai nilai dinamis..?
Ini adalah Vertex Shader saya:
const float FresnelPower = 1.0;
uniform float Eta; // <---- MUST BE CONSTANT...
const float F = ((1.0-Eta) * (1.0-Eta)) / ((1.0+Eta) * (1.0+Eta));
varying vec3 Reflect;
varying vec3 Refract;
varying float Ratio;
void main()
{
vec4 ecPosition = gl_ModelViewMatrix * gl_Vertex;
vec3 ecPosition3 = ecPosition.xyz / ecPosition.w;
vec3 i = normalize(ecPosition3);
vec3 n = normalize(gl_NormalMatrix * gl_Normal);
Ratio = F + (1.0 - F) * pow((1.0 - dot(-i, n)), FresnelPower);
Refract = refract(i, n, Eta);
Refract = vec3(gl_TextureMatrix[0] * vec4(Refract, 1.0));
Reflect = reflect(i, n);
Reflect = vec3(gl_TextureMatrix[0] * vec4(Reflect, 1.0));
gl_Position = ftransform();
}