Войти
ПрограммированиеФорумГрафика

LibExt.h - подключение и использование

Страницы: 1 2 Следующая »
#0
20:26, 4 мая 2011

Здравствуйте!
Возникла проблема с подключением файла LibExt.h

кусок программы такой
header.h:


include "libext\libext.h"

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>
#include <ctime>
#include <string>
#include <vector>
#include <algorithm>


#include "gl/gl.h"
#include "gl/glut.h"
#include "gl/glaux.h"

//another structures


//

class  VertexBuffer
{
    GLuint  id;
    GLenum  target;
    bool    ok;
   
public:
    VertexBuffer  ();
    ~VertexBuffer ();

    GLenum  getId () const
    {
        return id;
    }
   
    void    bind  ( GLenum theTarget );
    void    unbind ();
   
    void    setData    ( unsigned size, const void * ptr, GLenum usage );
    void    setSubData ( unsigned offs, unsigned size, const void * ptr );
    void    getSubData ( unsigned offs, unsigned size, void * ptr );
    void  * map        ( GLenum access );
    bool    unmap      ();

    void    clear ();
   
   
    static  bool    isSupported ();
  };
//


VertexBuffer.cpp


#include "header.h"


void VertexBuffer::clear()
  {
    glBufferDataARB ( target, 0, NULL, 0 /*usage*/ );
  }

VertexBuffer :: VertexBuffer ()
{
    glGenBuffersARB ( 1, &id );
   
    ok    = ( glIsBufferARB ( id ) == GL_TRUE );
    target = 0;
}

VertexBuffer :: ~VertexBuffer ()
{
    glDeleteBuffersARB ( 1, &id );
}

void    VertexBuffer :: bind ( GLenum theTarget )
{
    glBindBufferARB ( target = theTarget, id );
}

void    VertexBuffer :: unbind ()
{
    glBindBufferARB ( target, 0 );
}

void    VertexBuffer :: setData ( unsigned size, const void * ptr, GLenum usage )
{
    glBufferDataARB ( target, size, ptr, usage );
}

void    VertexBuffer :: setSubData ( unsigned offs, unsigned size, const void * ptr )
{
    glBufferSubDataARB ( target, offs, size, ptr );
}

void    VertexBuffer :: getSubData ( unsigned offs, unsigned size, void * ptr )
{
    glGetBufferSubDataARB ( target, offs, size, ptr );
}

void  * VertexBuffer :: map ( GLenum access )
{
    return glMapBufferARB ( target, access );
}

bool    VertexBuffer :: unmap ()
{
    return glUnmapBufferARB ( target ) == GL_TRUE;
}

bool    VertexBuffer :: isSupported ()
{
    return  isExtensionSupported ( "GL_ARB_vertex_buffer_object" );
}


ошибки:

1>Main.obj : error LNK2001: unresolved external symbol "bool __cdecl isExtensionSupported(char const *)" (?isExtensionSupported@@YA_NPBD@Z)
1>VertexBuffer.obj : error LNK2001: unresolved external symbol "void (__stdcall* glGetBufferSubDataARB)(unsigned int,int,int,void *)" (?glGetBufferSubDataARB@@3P6GXIHHPAX@ZA)
1>VertexBuffer.obj : error LNK2001: unresolved external symbol "void (__stdcall* glDeleteBuffersARB)(int,unsigned int const *)" (?glDeleteBuffersARB@@3P6GXHPBI@ZA)
1>VertexBuffer.obj : error LNK2001: unresolved external symbol "void (__stdcall* glBindBufferARB)(unsigned int,unsigned int)" (?glBindBufferARB@@3P6GXII@ZA)
1>VertexBuffer.obj : error LNK2001: unresolved external symbol "void (__stdcall* glBufferSubDataARB)(unsigned int,int,int,void const *)" (?glBufferSubDataARB@@3P6GXIHHPBX@ZA)
1>VertexBuffer.obj : error LNK2001: unresolved external symbol "unsigned char (__stdcall* glIsBufferARB)(unsigned int)" (?glIsBufferARB@@3P6GEI@ZA)
1>VertexBuffer.obj : error LNK2001: unresolved external symbol "unsigned char (__stdcall* glUnmapBufferARB)(unsigned int)" (?glUnmapBufferARB@@3P6GEI@ZA)
1>VertexBuffer.obj : error LNK2001: unresolved external symbol "void * (__stdcall* glMapBufferARB)(unsigned int,unsigned int)" (?glMapBufferARB@@3P6GPAXII@ZA)
1>VertexBuffer.obj : error LNK2001: unresolved external symbol "void (__stdcall* glGenBuffersARB)(int,unsigned int *)" (?glGenBuffersARB@@3P6GXHPAI@ZA)
1>VertexBuffer.obj : error LNK2001: unresolved external symbol "void (__stdcall* glBufferDataARB)(unsigned int,int,void const *,unsigned int)" (?glBufferDataARB@@3P6GXIHPBXI@ZA)

Компилятор: VS2008

пробовал по разному, ничего не получается

Заранее благодарен


#1
20:34, 4 мая 2011

Вместо libext возьми лучше glew (http://glew.sourceforge.net/).
(но и там и там тебе помимо включения заголовка, необходимо будет подсовывать линковщику саму библиотеку)

#2
20:41, 4 мая 2011

Спасибо большое
Я раньше тоже пробовал, но сейчас нашел ошибку
glew - работает

#3
21:14, 4 мая 2011

PANDA
ну вот теперь чел не узнает, что это за страшная ошибка unresolved external symbol, и в следующий раз опять создаст такую же тупую тему.

#4
21:17, 4 мая 2011

Да знаю я в чем суть ошибки
но ведь файла libext.lib нигде нет
от и спросил

#5
21:37, 4 мая 2011

fingolfin
> Новичок
ну понятно ...

#6
9:56, 5 мая 2011
Vendein_RaZoR
> ну понятно ...

блин, ну скажи, чей ты виртуал?

#7
12:14, 27 июня 2011

Если подключить opengl32.lib, то исчезают все выше перечисленные ошибки кроме

error LNK2001: неразрешенный внешний символ ""void (__stdcall* glBindBufferARB)(unsigned int,unsigned int)" (?glBindBufferARB@@3P6GXII@ZA)"

А где эту найти я пока не знаю

#8
13:17, 27 июня 2011

Достаточно просто подключить файл libExt.cpp

#9
13:54, 27 июня 2011

steps3d, да никак не получается. Брал и с твоего сайта исходник из статьи - твой компилится, мой нет

#10
14:16, 27 июня 2011

Так ошибки идут не на компиляцию, а на линковку

#11
14:35, 27 июня 2011

Та если бы я знал, что прилинковать.
Сейчас у меня такое:
"kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib"
и
opengl32.lib glu32.lib glut32.lib msvcrtold.lib lib\minifmod.lib lib\winmm.lib

#12
15:25, 27 июня 2011

SCRIMERS
Используй glext и не парь мозг себе и всем...
ИМХО - самый просто и удобный вариант... И никаких ни длл таскать не надо, ни париться с непонятной фигнёй...

Пример использования: (просто я знаю, что бы ты спросил)

// Где-то в сорце (я обычно определяю в глобальной области)
// определи переменную:
PFNGLBINDBUFFERARBPROC glBindBufferARB = NULL;

// Потом нужно будет инициализировать её...
glBindBufferARB = (PFNGLBINDBUFFERARBPROC )wglGetProcAddress ("glBindBufferARB ");
// После этого ты сможешь свободно использовать glBindBufferARB ()

Откуда я взял "PFNGLBINDBUFFERARBPROC"? Очень просто:
Открываешь файл glext.h (в чём хочешь) жми Ctrl + f (поиск) и ищи по glBindBufferARB

glBindBufferARB встретится несколько раз... Тебе нужна строка вида:

typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer);

Думаю, что делать потом пояснять не надо...

#13
15:31, 27 июня 2011

Дудки, ezhickovich, вот мой исходник.
Там есть glext и всё остальное - можем сам глянуть.
http://upload.net.ua/download.php?file=empty_zip46

#14
15:32, 27 июня 2011

SCRIMERS
В следующий раз юзай codepad.org

Страницы: 1 2 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.