Bug 10836

Summary: Невозможность использования GLUT при использовании GLEW.
Product: Sisyphus Reporter: serpiph <serpiph>
Component: libglewAssignee: Nobody's working on this, feel free to take it <nobody>
Status: CLOSED WORKSFORME QA Contact: qa-sisyphus
Severity: major    
Priority: P3 CC: mike
Version: unstable   
Hardware: all   
OS: Linux   
Attachments:
Description Flags
Fix problem when using GLEW and GLUT together.
none
Changes to glew.h from 1.3.6-alt1 none

Description serpiph 2007-02-14 10:58:38 MSK
Если в программе написать:
#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 serpiph 2007-02-14 10:59:44 MSK
*** Bug 10835 has been marked as a duplicate of this bug. ***
Comment 2 serpiph 2007-02-14 11:00:01 MSK
*** Bug 10829 has been marked as a duplicate of this bug. ***
Comment 3 Konstantin Pavlov 2007-02-14 17:52:39 MSK
I'd prefer #2.

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

Патч, который я вижу, прикладывается к исходникам.
Comment 5 serpiph 2007-02-15 01:51:03 MSK
Created attachment 1801 [details]
Fix problem when using GLEW and GLUT together.
Comment 6 Konstantin Pavlov 2007-02-19 16:12:01 MSK
Fixed in glew-1.3.5-alt2, going to i/S.
Comment 7 Konstantin Pavlov 2007-02-27 13:59:57 MSK
Работает? Если да, то закрывайте.
Comment 8 serpiph 2007-03-19 00:42:29 MSK
(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 serpiph 2007-03-19 00:46:01 MSK
Created attachment 1863 [details]
Changes to glew.h from 1.3.6-alt1
Comment 10 Konstantin Pavlov 2007-03-26 17:15:59 MSD
Пересборка с таким libglew-devel что-либо проясняет?
Возможно, имеет смысл даже погонять ее клиентов.
Comment 11 Konstantin Pavlov 2007-07-13 12:51:20 MSD
Это еще актуально?
Comment 12 serpiph 2007-07-13 13:17:19 MSD
Попробую на выходных проверить, тогда отпишусь.
Comment 13 Michael Shigorin 2010-09-14 12:51:11 MSD
На выходных какого года? :)

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;
}