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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> OpenGl проблема с шейдерами 
V
    Опции темы
Ketrikken
  Дата 8.12.2009, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помогите, пожалуйста!
Я пытаюсь сделать шейдер для изменения якрости.

Код на glsl выглядит так
Код

uniform sampler2D texFrame;
void main(void)
{
  vec3 texColor = texture2D(texFrame, gl_TexCoord[0].st).rgb; 
}

пока даже ничего существенного не происходит.

это код на Delphi 
Код

procedure TForm1.Init;
begin

  DC := GetDC(Handle);
  SetDCPixelFormat(DC);
  hrc := wglCreateContext(Canvas.Handle);
  wglMakeCurrent(DC, hrc);

  glClearColor (0.5, 0.5, 0.75, 1.0); // цвет фона
  glNewList (ListName, GL_COMPILE);
    glBegin(GL_QUADS) ;
     glTexCoord2d (0.0, 0.0);
      glVertex2f (-1.0, -1.0);
      glTexCoord2d (640 / 1024, 0.0);
      glVertex2f (1.0 , -1.0);
      glTexCoord2d (640 / 1024, 480 / 1024);
      glVertex2f (1.0, 1.0);
      glTexCoord2d (0.0, 480 / 1024);
      glVertex2f (-1.0, 1.0);
    glEnd;
  glEndList;

  glGenTextures(2, @TexName);
  glBindTexture(GL_TEXTURE_2D, TexName);
  glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

  glTexImage2D(GL_TEXTURE_2D, 0, 3, 1024, 1024, 0, {GL_RGB}BGR_EXT, GL_UNSIGNED_BYTE, FTexImage);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);

  glEnable(GL_TEXTURE_2D);

  CreateShader;
end;


procedure TForm1.CreateShader;
begin
  FFragmentProgram := glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB);
  if FFragmentProgram <> 0 then
  begin
    LoadShader(FFragmentProgram, 'shader.fsh');
    FProgram := glCreateProgramObjectARB;
    if FProgram <> 0 then
    begin
      glAttachObjectARB(FProgram, FFragmentProgram);

      glLinkProgramARB(FProgram);

      glValidateProgramARB(FProgram);
      CheckGLSLError(FProgram, GL_OBJECT_VALIDATE_STATUS_ARB);
//до этого момента функция CheckGLSLError возвращает, что у меня все хорошо сбилдилось 
и скомпилилось

      texture := glGetUniformLocationARB(FProgram, PChar('texFrame'));
      glUseProgramObjectARB(FProgram);

      glUniform1fARB(texture, @TexName);
      CheckGLSLError(FProgram, GL_OBJECT_ACTIVE_UNIFORMS_ARB); //возвращает ошибку, пишет,
что текстура не была задана
    end;
  end;
end;


причем, если я убираю строчку
vec3 texColor = texture2D(texFrame, gl_TexCoord[0].st).rgb; 
все работает. я ее изменяла так:
vec4 texColor = texture2D(texFrame, gl_TexCoord[0].st); 
и  так
float texColor = texture2D(texFrame, gl_TexCoord[0].st).r; 
все равно не работает.

Подскажите, что не так? Заранее спасибо!
PM MAIL   Вверх
Bitter
Дата 8.12.2009, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 5
Всего: 27



я не особо понимаю в шейдерах GL, но разве функция main  не должна иметь тип (наверно vec4) и return ? Вот в шейдерах DirectX функция либо имеет тип float4 либо параметр out float4 oCol:COLOR. Ну вот обычный пример шейдера на DirectX, может по подобию напишешь на GL

Код

 
 sampler2D tex0;
 
 void func (in float2 base : TEXCOORD0,
                 out float4 oCol:COLOR)
 {
   oCol = tex2D(tex0, base);
 };



На выходе шейдера должен быть цвет пикселя. А у тебя вроде нету ничего

Добавлено через 2 минуты и 11 секунд
Да, и еще на вход у тебя ничего не поступает. Это так и должно быть?
PM MAIL ICQ Skype   Вверх
Rpahut
Дата 24.12.2009, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


0xdeadbeef
*


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

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



Если только в делфи текстуры не типа float, то следует использовать glUniform1iARB(texture, @TexName);
--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

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

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

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

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


 




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


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

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