Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Karl-von-bahnhof
Založen: 24. 01. 2010 Příspěvky: 5
|
Zaslal: 24. leden 2010, 21:22:15 Předmět: OpenGL - windows 7 - ifdef GL_VERSION_1_4 problem |
|
|
Dobrý den, jen podotýkám, že už nějakou dobu pročítám různé stránky, ale výsledek je, že v tom mám trochu binec
Čtu knihu OpenGL průvodce programátora a příklady, kde je konstrukce:
kód: |
ifdef GL_VERSION_1_4 |
tam se kód neprovede.
Verzi OpenGL v openGL extenssion viewer mi ukazuje 1.4 podpora 100% a verze je 3.0.
I když dodám:
kód: |
#include <GL/glext.h>
#define GL_VERSION_1_4 |
tak mi to vypisuje chyby jako treba:
kód: |
1>d:\dokumenty\c++\opengl\test\test\main.cpp(104) : error C3861: 'glPointParameterfvEXT': identifier not found
1>d:\dokumenty\c++\opengl\test\test\main.cpp(95) : error C3861: 'glFogCoordfEXT': identifier not found |
Tedy hlavně EXT funkce.
Netušíte někdo co doinstalovat, co kam dokopírovat atd.... ?
Mockrát děkuji |
|
Návrat nahoru |
|
 |
nou

Založen: 28. 07. 2007 Příspěvky: 1050
|
Zaslal: 24. leden 2010, 21:50:01 Předmět: |
|
|
skusit definovat GL_GLEXT_PROTOTYPES v nastaveniach projektu.
alebo pouzit GLEW _________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
 |
Karl-von-bahnhof
Založen: 24. 01. 2010 Příspěvky: 5
|
Zaslal: 24. leden 2010, 22:12:45 Předmět: |
|
|
Vypadá to, že glew něco vyřešil. Přestalo to házet něco jako:
kód: |
1>d:\dokumenty\c++\opengl\test\test\main.cpp(101) : error C2065: 'GL_POINT_SIZE_MAX_EXT' : undeclared identifier
1>d:\dokumenty\c++\opengl\test\test\main.cpp(103) : error C2065: 'GL_DISTANCE_ATTENUATION_EXT' : undeclared identifier
1>d:\dokumenty\c++\opengl\test\test\main.cpp(103) : error C3861: 'glPointParameterfvEXT': identifier not found |
Ale teď to zase píše při linkování:
kód: |
1>main.obj : error LNK2001: unresolved external symbol __imp____glewPointParameterfEXT
1>main.obj : error LNK2001: unresolved external symbol __imp____glewPointParameterfvEXT |
že by špatně nakopírovaná dll knihovna?
EDIT: ještě bez toho GLEW mě to pustí jen přes:
kód: |
ifdef GL_VERSION_1_1 |
takže ve windows je jen 1.1? Po přidání GLEW už mě to pustí i přes 1.4 |
|
Návrat nahoru |
|
 |
(CZ)genius
Založen: 28. 07. 2007 Příspěvky: 85 Bydliště: Neratovice
|
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 25. leden 2010, 00:37:51 Předmět: |
|
|
Na Windows pro OpenGL novější než 1.1 se nejčastěji používá buď GLEW nebo GLEE. Verze 1.1 je jen minimální konfigurace, jakou je Windows ochotno podporovat, cokoliv novějšího se získává přes wglGetProcAddress, což používají obě zmíněné knihovny. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
michalferko
Založen: 29. 09. 2008 Příspěvky: 83
|
Zaslal: 25. leden 2010, 08:53:03 Předmět: |
|
|
To ze to pise pise pri linkovani znamena najskor, ze si neprilinkoval glew32.lib _________________ Moje minihry a ine projekty |
|
Návrat nahoru |
|
 |
Karl-von-bahnhof
Založen: 24. 01. 2010 Příspěvky: 5
|
Zaslal: 25. leden 2010, 13:06:22 Předmět: |
|
|
Tak abych to shrnul: někoho to třeba bude taky zajímat a hlavně se ujistim že to chápu dobře.
Podpora ve windows je jen pro verzi 1.1, jinak se musí použít GLEW nebo GLEE.
Stáhnul jsem si GLEW což dodalo podporu pro verzi 1.4.
Mezi soubory GLEW knihovny je i soubor kam co nakopírovat.
Vložil jsem hlavičkový soubor (musí být před glut.h)
Přilinkoval knihovnu (aditional dependecies v nastavení linkeru v VS2008)
Ale stejně příklady v knize "OpenGL - průvodce programátora" je asi nekompatibilní, protože u některých příkladů se musí přetypovat na const ukazatele (což bude asi kvůli c++ překladači), ale někde to vyhazuje runtime exception. Třeba:
kód: |
void display(void)
{
static GLubyte oneIndices[] = {0, 1, 2, 3, 4, 5, 6};
static GLubyte twoIndices[] = {1, 7, 8, 9, 10, 11};
static GLsizei count[] = {7, 6};
static const GLvoid * indices[2] = {oneIndices, twoIndices};
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (1.0, 1.0, 1.0);
glMultiDrawElementsEXT (GL_LINE_STRIP,(GLsizei *) count, GL_UNSIGNED_BYTE,
indices, 2);
glFlush ();
}
řádek 11: Unhandled exception at 0x00000000 in test.exe: 0xC0000005: Access violation |
Navíc mi píše, že count je int místo GLsizei - což taky moc nechápu.[/b]
S tím wglGetProcAddress mě prosím ještě maličko kopni, nějak nechápu co to je.
Jinak používám taky Kubuntu, takže jestli je programování OpenGL jednodušší v Linuxu, tak já nebudu spouštět sedmičky co myslíte. |
|
Návrat nahoru |
|
 |
nou

Založen: 28. 07. 2007 Příspěvky: 1050
|
Zaslal: 25. leden 2010, 13:59:41 Předmět: |
|
|
no v linuxe som len definoval GL_GLEXT_PROTOTYPES a mam dostupne vsetko co podporuje MESA co znamena prakticky OGL 2.1 bez GLEW alebo GLEE.
pouzitie wglGetProcAddress je nasledovne. ale lepsie je pouzivat to GLEW.
kód: |
glMultiTexCoord1fARB = (PFNGLMULTITEXCOORD1FARBPROC)wglGetProcAddress("glMultiTexCoord1fARB");
glMultiTexCoord2fARB = (PFNGLMULTITEXCOORD2FARBPROC)wglGetProcAddress("glMultiTexCoord2fARB");
glMultiTexCoord3fARB = (PFNGLMULTITEXCOORD3FARBPROC)wglGetProcAddress("glMultiTexCoord3fARB");
glMultiTexCoord4fARB = (PFNGLMULTITEXCOORD4FARBPROC)wglGetProcAddress("glMultiTexCoord4fARB"); |
inak by si si mal stiahnut najnovsiu verziu glext.h http://www.opengl.org/registry/api/glext.h a dat do include/GL adresara tvojho prekladaca. myslim ze mas staru verziu ktora je len do 1.4 _________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
 |
Karl-von-bahnhof
Založen: 24. 01. 2010 Příspěvky: 5
|
Zaslal: 25. leden 2010, 15:22:18 Předmět: |
|
|
Následující funkce mi vyhazují neoprávněný zápis do paměti - použití NULL
kód: |
glBlendEquation(GL_FUNC_ADD);
glFogCoordfEXT (f1);
glMultiDrawElementsEXT (GL_LINE_STRIP,(GLsizei *) count, GL_UNSIGNED_BYTE, indices, 2);
//vsechny vraci:
Unhandled exception at 0x00000000 in test.exe: 0xC0000005: Access violation
|
Mohlo by být tím, že sem si přepsal knihovnu openGL32 (což sem ale myslím nedělal)? Nebo nějaký jiný problém? Prostě mi příde, že ty pokročilejší funkce nejsou někde inicializovaný. |
|
Návrat nahoru |
|
 |
]semo[

Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 25. leden 2010, 16:24:30 Předmět: |
|
|
Nejspíš ten glew inicializuješ ve špatný čas, jsi si jist, že
1) vytvoříš kontext
2) zavoláš wglMakeCurrent (a ten vrátí TRUE)
3) a teprve potom zavoláš glewInit()
? _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
 |
johnnash
Založen: 30. 07. 2007 Příspěvky: 80
|
Zaslal: 25. leden 2010, 16:26:14 Předmět: |
|
|
Pokud pouzivas glew volas pri inicializaci glewInit()? |
|
Návrat nahoru |
|
 |
Karl-von-bahnhof
Založen: 24. 01. 2010 Příspěvky: 5
|
Zaslal: 25. leden 2010, 19:43:10 Předmět: |
|
|
No jasně že nevolám. to sou ty manuály.
Pro zájemce o čem je řeč: http://glew.sourceforge.net/basic.html
Díky moc vám všem. Byla radost s Vámi spolupracovat (i když na mý straně to bylo asi horší) |
|
Návrat nahoru |
|
 |
|