Помогите с современной функцией вызова opengl для создания текстуры ?
Привет, я пытаюсь работать с мультитекстурой, используя почву. Я думаю, что это ошибка в том, как я называю текстуру. Теперь у меня есть 2 текстуры с 2 разными источниками изображения (текстура 1 и текстура 2), они выглядят так :
Текстура :
glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, textures[0]); (...) image1 = SOIL_load_image("res/img1.png",&width,&height,0,SOIL_LOAD_RGBA); //"res/img2.png" for image2 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height,0, GL_RGBA, GL_UNSIGNED_BYTE, image1); SOIL_free_image_data(image1);
изображение 1 для текстуры 1 и изображение 2 для текстуры 2.
Это работает, и я могу вызвать их, меняя текстуру. Теперь я пытаюсь изменить Источник Изображения для текстуры 1 и текстуры 2 как одно и то же изображение (img0).
Я создал функцию changed(), используя входное изображение (img0), затем я сделаю некоторую модификацию пикселей с помощью img0 и сохраню результаты как t1 и t2 (оба беззнаковых символа). Я хочу использовать t1 в качестве источника для texture1 и t2 в качестве источника для texture2, чтобы я мог позвонить и переключиться между ними позже. (код довольно длинный, пожалуйста, дайте мне знать, если вы хотите, чтобы я включил их).
Что я уже пробовал:
Я попытался вызвать эту функцию следующим образом :
//create texture===================================================== GLuint textures[2]; glGenTextures(2, textures); image = SOIL_load_image("res/img0.png", &width, &height, 0, SOIL_LOAD_RGBA); if (image == NULL) exit(0); image1 = NULL; //(image1 = t1 later in changed() func.) image2 = NULL; //(image2 = t2 later in changed() func.) changed(); //Texture 1 glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, textures[0]); (...) glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, image1); SOIL_free_image_data(image1); //then Texture 2 with image2
Но это не работает, никакой ошибки и никакого изображения, нарисованного на сцене. Я проверил, изменив значение прозрачного цветового буфера, и цветовой буфер работает.Так что это проблема с вызовом функции и передачей моего изображения. Есть предложения ?
[ОБНОВЛЕНИЕ]
Я добавил код обработки ошибок для проверки, например :
while (!(err = glGetError())) { cout << "some error message" << err << endl; }
И оказалось, что ошибка происходит после того, как я загрузил исходный код изображения :
image = SOIL_load_image("res/img0.png", &width, &height, 0, SOIL_LOAD_RGBA);
Как правильно загрузить изображение, используя почву в качестве источника для функции ?
Это тот же самый способ, которым я сделал это с GLUT, и он работает, отличается ли он от GLFW ?
[ОБНОВЛЕНИЕ СНОВА]
Я заменил обработку ошибок этим, и программа все еще работает. Не выход, так что определенно изображение есть.
if (image == NULL) { cout << "Error loading image source." << err << endl; exit(0); }
Я также попытался распечатать ширину и высоту изображения, и я получил правильный результат на консоли.
cout << width << " x " << height;
Но изображение не показывается. Мне нужно только, чтобы это изображение было входом моей функции, и позже моя функция будет генерировать результат изображения 2, я буду использовать его как текстуру 1 и текстуру 2. - Помочь ?