Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.08.2011, 03:49   #1
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию GLSL Shaders Access Violation

Доброго времени суток Уважаемые эксперты.
Вообщем возникла проблема при инициализации GLSL шейдеров, я совсем не давно начал их изучать и мне хочется продолжить это делать, но пока даже и запустить не получается.
Я уверен дело пошло бы быстрее если бы работал с приложением имея доступ к исходному коду, но так как я работаю с приложение чьих исходников у меня нет, задача немного усложняется.

Вообщем суть проблемы состоит в следующем
Имеется *.exe приложение, которое во время запуска подгружает динамически библиотеку opengl32.dll из системной директории. Путем подстановки *.dll с идентичным именем в директорию с *.exe приложением, я перенаправляю чтение *.dll файла на мой и соответственно импортирую все GL функции в мою библиотеку, вообщем делаю эмуляцию стандартной opengl32.dll.

Вот как примерно выглядит одна из псевдо оригинальных функций:
Код:
BOOL __stdcall wglMakeCurrent(HDC hdc, HGLRC hglrc){ 
 GL.ptr_wglMakeCurrent(hdc, hglrc); // Указатель на оригинальную функцию
 return TRUE;
}
Вот моя функция инициализации GLSL. При попытке инициализации, я получаю ошибку с Access violation when executing [00000000].
Немного по googl'ив я наткнулся на несколько тем, где ребят описывали мол шейдер необходимо инициализировать когда будет создан gl контекст, ну думаю ладно, попробуем.

Код:
InitializeGLSL(const char *vsFile, const char *fsFile) {
 shader_vp = glCreateShader(GL_VERTEX_SHADER);
 shader_fp = glCreateShader(GL_FRAGMENT_SHADER);
    
 const char* vsText = textFileRead(vsFile);
 const char* fsText = textFileRead(fsFile);	
    
 glShaderSource(shader_vp, 1, &vsText, 0);
 glShaderSource(shader_fp, 1, &fsText, 0);
    
 glCompileShader(shader_vp);
 validateShader(shader_vp, vsFile);
 glCompileShader(shader_fp);
 validateShader(shader_fp, fsFile);
    
 shader_id = glCreateProgram();
 glAttachShader(shader_id, shader_fp);
 glAttachShader(shader_id, shader_vp);
 glLinkProgram(shader_id);
 validateProgram(shader_id);
}
Код:
BOOL __stdcall wglMakeCurrent(HDC hdc, HGLRC hglrc){ 
 GL.ptr_wglMakeCurrent(hdc, hglrc); // Указатель на оригинальную функцию
 InitializeGLSL("..\\Data\\Shader\\shader.vert", "..\\Data\\Shader\\shader.frag");
 return TRUE;
}
Собственно ничего мне это не дало, проблема с violation так и осталась, кто что может мне посоветовать? Спасибчик за ранее.

Последний раз редактировалось coNsept; 04.08.2011 в 03:54.
coNsept вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятный Access Violation _-Re@l-_ Общие вопросы Delphi 7 07.05.2011 12:15
Access Violation SunKnight Общие вопросы Delphi 2 05.06.2008 16:46
Access violation at address.. RegentM Общие вопросы Delphi 4 01.11.2007 03:46
Access Violation Carbon Общие вопросы Delphi 12 18.09.2007 19:55