Модераторы: Rickert
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача текстуры в sampler2D 
V
    Опции темы
$tatic
Дата 22.4.2007, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 28.1.2005

Репутация: 7
Всего: 22



Помогите, уже замучился, не могу понять в чем ошибка.
Программа загружает следующие шейдеры GLSL:
Код

// вершинный
varying vec2 Texcoord;

void main( void )
{
    gl_Position = ftransform();
    Texcoord    = gl_MultiTexCoord0.xy;
    
}


// фрагментный
uniform sampler2D baseMap;

varying vec2 Texcoord;

void main( void )
{
    gl_FragColor = texture2D( baseMap, Texcoord );
    
}


Сама программа загружает как текстуры 2 картинки и биндит их в разные текстурные блоки:
Код

    public void init(GLAutoDrawable drawable) {
        GL gl = drawable.getGL();
        gl.glClearColor(0f, 0f, 0f, 0f);
        gl.glEnable(GL.GL_DEPTH_TEST);
        gl.glDepthFunc(GL.GL_LEQUAL);
        gl.glHint(GL.GL_POLYGON_SMOOTH_HINT, GL.GL_NICEST);
        gl.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST);
        
        program = new ShaderProgram(gl);
        vs = new VertexShader();
        fs = new FragmentShader();
        try {
            vs.load("tex.vsh");
            fs.load("tex.fsh");
            baseMap = TextureIO.newTexture(new File("Fieldstone.tga"), true);
            bumpMap = TextureIO.newTexture(new File("FieldstoneBumpDOT3.tga"), true);
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        
        vs.compile();
        fs.compile();
        program.attach(vs);
        program.attach(fs);
        program.link();

        gl.glActiveTexture(GL.GL_TEXTURE0);
        baseMap.bind();
        gl.glActiveTexture(GL.GL_TEXTURE1);
        bumpMap.bind();
        program.setUniform("baseMap", 0);
        //program.setUniform("baseMap", 1);

        System.out.println(program.getLog());
        program.use();
    }

Даже когда я передаю в униформ ссылку на текстурный блок 1 все равно выводится текстура из блока 0. Если же поменять местами номера блоков в GL_TEXTUREx всегда начинает выводиться вторая текстура.
В чем ошибка???
PM MAIL   Вверх
$tatic
Дата 24.4.2007, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 28.1.2005

Репутация: 7
Всего: 22



Все - разобрался. Униформы надо было выставлять после подключения программы (program.use()). В противном случае значение униформа не меняется и всегда используется текстурный блок 0
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




[ Время генерации скрипта: 0.0403 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.