На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела "Программирование графики"
1) Данный раздел предназначен для обсуждения проблем, возникающих при программировании задач, связанных с чтением, сохранением, обработкой, созданием, отрисовкой графической информации (в том числе - 3D [OpenGL, Direct3D] и анимации [в т.ч. VFW, DirectShow, OpenDML]).
Флэш обсуждают здесь!.

2) Если вы хотите получить совет для конкретной платформы/языка программирования, обязательно укажите их в вопросе.

3) Уважаемые новички! Мы приветствуем Ваше желание научить всех посетителей раздела правильному программированию. Но огромная просьба, перед тем, как писать поучения в старых (последний ответ - "старее" месяца, а особенно, если вопрошавший не появляется на форуме уже не первый месяц, в чем можно убедиться в его профиле) темах, хорошо подумать, будет ли кому-нибудь, кроме Вас cамих, это интересно.



Ваше мнение о модераторах: user posted imageBarazuk, user posted imageOpenGL, user posted imageMikle
Модераторы: OpenGL, Mikle
  
> [OpenGL] Чёрный экран при вызове glClearColor с заданным цветом
    TL;DR; Windows 10 + SDL 2 (SDL2x64.dll с офф сайта) + Angle (libGLESv2.dll скомпиленный ручками)

    - SDL2 https://www.libsdl.org/ для отрисовки и манипуляции окошками
    - Angle https://github.com/google/angle/blob/master/doc/DevSetup.md для доступа к OpenGL

    Обе библиотечки в бинарном виде (dll)

    Если по коду, то создаю окошко:
    1) Подключаю либы
    2) Инициализирю SDL (SDL_Init) в режиме видео
    3) Выставляю настройки GL
    ExpandedWrap disabled
      SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES);
      SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
      SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
      SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);

    4) SDL_CreateWindow в режиме SDL_WINDOW_OPENGL
    5) Затем создаю SDL_GL_CreateContext для окна - контекст создаётся, возвращает 65537 (для typedef void *SDL_GLContext;)
    6) Затем создаю бесконечный цикл и там (while true):
    7.1) glClearColor(0.0, 1.0, 0.0, 1.0); // green 1
    7.2) glClear(0x00000100 | 0x00004000); // GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT
    7.3) SDL_GL_SwapWindow

    В результате окно создаётся, SDL отрабатывает, но OpenGL не подрубается к нему (по ощущениям) и операции glClearColor/glClear тупо игнорируются.

    1) Мб кто сталкивался с подобным? Ибо с дебагом всё чуть сложновато, т.к. язык специфичный для OpenGL)))
    2) Всякие glCreateShader перманентно возвращают 0. Может я забыл инициализировать что?


    Прикреплённая картинка
    Прикреплённая картинка
      P.S. Заменил на коробочный (который в windows) OpenGL32 и заработало. Но там нет ни функций компиляции шейдеров, ни создания буфера...

      Чо делать-то? :-?
      Прикреплённая картинка
      Прикреплённая картинка


      Добавлено
      Если скопировать этот opengl32.dll из system32 локально и подрубать его, то опять всё ломается. Если же заодно ещё скопировать glu32.dll, то опять всё чинится :-?
        Перед glCreateShader создаётся программа:
        program = glCreateProgram();
        к коей опосля прицепляется этот шейдер, так что может от несоздания проги ноль возвращается?

        Добавлено
        П.С. не надо вечно в цикле задавать glClearColor; достаточно один раз, а потом оно уже знает чем чистить. ;)
          Цитата Славян @
          П.С. не надо вечно в цикле задавать glClearColor; достаточно один раз, а потом оно уже знает чем чистить.


          Славян, это я делал для того, что б отладчиком VS прицепиться к программе и попытаться перехватить этот вызов. Понять почему glClearColor не срабатывает.


          Сама проблема в том, что с нативным opengl32 - всё ок (но там нет нужного функционала), а libgles (которую я и компилил, и пытался скопипасть из Chrome) - не хочет вообще. Чёрный экран. glClearColor - никак не влияет на неё.

          Добавлено
          Заголовки подключаемые и там и там везде одинаковые юзал для того, чтобы либу вхреначить.
          ExpandedWrap disabled
            typedef unsigned int GLbitfield;
            typedef float khronos_float_t;
            typedef khronos_float_t GLfloat;
             
            extern void glClearColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
            extern void glClear (GLbitfield mask);
          Сообщение отредактировано: Serafim -
              Цитата Serafim @
              Проблема решена

              Наверно очень секретным методом?
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0339 ]   [ 19 queries used ]   [ Generated: 28.03.24, 09:36 GMT ]