Bug 10836 - Невозможность использования GLUT при использовании GLEW.
: Невозможность использования GLUT при использовании GLEW.
Status: CLOSED WORKSFORME
: Sisyphus
(All bugs in Sisyphus/libglew)
: unstable
: all Linux
: P3 major
Assigned To:
:
:
:
:
:
  Show dependency tree
 
Reported: 2007-02-14 10:58 by
Modified: 2010-09-14 12:51 (History)


Attachments
Fix problem when using GLEW and GLUT together. (717 bytes, patch)
2007-02-15 01:51, serpiph
no flags Details | Diff
Changes to glew.h from 1.3.6-alt1 (625 bytes, patch)
2007-03-19 00:46, serpiph
no flags Details | Diff


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2007-02-14 10:58:38
Если в программе написать:
#include <GL/glew.h>
#include <GL/glut.h>
то программа не соберётся по причине ошибочного развёртывания при определении
макроса GLUTAPIENTRY. В GL/glut.h он определяется как
#define GLUTAPIENTRY GLAPIENTRY
Но макрос GLAPIENTRY удаляется в GL/glew.h:
#undef GLAPIENTRY
Дополнительное подключение GL/gl.h и GL/glu.h не помогает, так как GL/glew.h в
себе вызывает GL/glu.h, который вызывает GL/gl.h. Решения 2:
1. В программах для ALTLinux принудительно вставлять такой код (пример:
enblend-3.0):
#include <GL/glew.h>
#define GLAPIENTRY
#include <GL/glut.h>
2. Пропатчить GL/glew.h, чтобы он сохранял состояние GLAPIENTRY, полученное
после вызова GL/glu.h:
#include <GL/glu.h>
#define GLAPIENTRY_GL GLAPIENTRY
и вместо
#undef GLAPIENTRY
написать
#undef GLAPIENTRY
#define GLAPIENTRY GLAPIENTRY_GL
Steps to Reproduce:
Программа вида
#include <GL/glew.h>
#include <GL/glut.h>

Actual Results:  
Собирается с ошибкой

Expected Results:  
Сборка нормальная
------- Comment #1 From 2007-02-14 10:59:44 -------
*** Bug 10835 has been marked as a duplicate of this bug. ***
------- Comment #2 From 2007-02-14 11:00:01 -------
*** Bug 10829 has been marked as a duplicate of this bug. ***
------- Comment #3 From 2007-02-14 17:52:39 -------
I'd prefer #2.

Could you please provide a patch?
------- Comment #4 From 2007-02-15 01:10:45 -------
(In reply to comment #3)
> I'd prefer #2.
> 
> Could you please provide a patch?

Патч, который я вижу, прикладывается к исходникам.
------- Comment #5 From 2007-02-15 01:51:03 -------
Created an attachment (id=1801) [details]
Fix problem when using GLEW and GLUT together.
------- Comment #6 From 2007-02-19 16:12:01 -------
Fixed in glew-1.3.5-alt2, going to i/S.
------- Comment #7 From 2007-02-27 13:59:57 -------
Работает? Если да, то закрывайте.
------- Comment #8 From 2007-03-19 00:42:29 -------
(In reply to comment #7)
> Работает? Если да, то закрывайте.

Выяснилась одна проблема: оказывается, компилятор не сразу формирует define, а
только при использовании его в обычной программе. Пример:
#define TEST1 5
#define TEST2 TEST1
#undef TEST1
int a = TEST2;
приведёт к получению ошибки при компиляции из-за того, что в результате будет
получен код:
int a = TEST1;
а не
int a = 5;

То есть предложенное мною решение на самом деле не является таковым. Пока в
голове крутится только удаление строк в GL/glew.h:
#undef APIENTRY
#undef GLAPIENTRY

когда в конце файла идёт чистка всего и вся. Патч для glew я приведу, но прошу
перед применением давайте вдвоём обмозгуем, я мог что-нибудь пропустить.
------- Comment #9 From 2007-03-19 00:46:01 -------
Created an attachment (id=1863) [details]
Changes to glew.h from 1.3.6-alt1
------- Comment #10 From 2007-03-26 17:15:59 -------
Пересборка с таким libglew-devel что-либо проясняет?
Возможно, имеет смысл даже погонять ее клиентов.
------- Comment #11 From 2007-07-13 12:51:20 -------
Это еще актуально?
------- Comment #12 From 2007-07-13 13:17:19 -------
Попробую на выходных проверить, тогда отпишусь.
------- Comment #13 From 2010-09-14 12:51:11 -------
На выходных какого года? :)

libglew-devel-1.5.6-alt1 и libfreeglut-devel-2.6.0-alt1 либо
libGLUT-devel-7.8.3-alt1 не вызывают проблем по крайней мере при сборке:

#include <stdio.h>
#include <GL/glew.h>
#include <GL/glut.h>

int main(void)
{
        printf("Hello, World!\n");
        return 0;
}