LINUX.ORG.RU

проблема с OpenGL


0

0

Нужно было исползовать таблицу цвета (glColorTable)
Однако компилятор выдал

.cpp:190: error: 'glColorTable' was not declared in this scope

в файл gl.h она действительно не декларирована , хотя по документации - должна.

Куда копать ?

ЗЫ - погуглив ничего полезного не нашёл.

Ответ на: комментарий от lazybones

а вообще всё равно странно -
ибо

glColorTable(GLenum target , GLenum internalFormat, GLsizei width , GLenum format, GLenum , type , const GLvoid *table);

:(

lazybones
() автор топика
Ответ на: комментарий от lazybones

нашёл декларирование этой функции в заголовке glext.h , подключил заголовок, но компилятор всё равно пишет

cpp:188: error: 'glColorTable' was not declared in this scope

ппццццц

lazybones
() автор топика
Ответ на: комментарий от Legioner

неа - тоже самое.
нашёл инфу, что нужно получить функциональные указатели на функции подмножества воспроизведения изображений (нужное расширение ARB_imaging у меня есть) - добавить в код

171: PFNGLCOLORTABLEPROC glColorTable = 0;
172: glColorTable = gltGetExtensionPointer("glColorTable");

на это компилятор пишет

:172: error: invalid conversion from 'void*' to 'void (*)(GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid*)

lazybones
() автор топика
Ответ на: комментарий от anonymous

гы - эти строки надо тока под вендой добавлять.
ппц.
Что характерно - сишная прога, юзающая эту же функцию,
С теми же заголовками - работает нормально.

lazybones
() автор топика
Ответ на: комментарий от lazybones

$ grep glColorTable /usr/include/GL/gl.h
GLAPI void GLAPIENTRY glColorTable( GLenum target, GLenum internalformat,
GLAPI void GLAPIENTRY glColorTableParameteriv(GLenum target, GLenum pname,
GLAPI void GLAPIENTRY glColorTableParameterfv(GLenum target, GLenum pname,

$ dpkg -S /usr/include/GL/gl.h
mesa-common-dev: /usr/include/GL/gl.h

$ dpkg -l | grep mesa-common-dev
ii mesa-common-dev 6.5.2-3ubuntu7 Developer documentation for Mesa


Исходники с вызовом glColorTable(0,0,0,0,0) собираются

mv ★★★★★
()
Ответ на: комментарий от mv

GL.h - месовский ?
у меня он из нвидивсеих дров. там этого нет.
зато эти же строки в glext.h

исходники сишные ? c++

просто я на плюсах пишу (с Qt)

lazybones
() автор топика
Ответ на: комментарий от lazybones

gl.h mesa'вский. Исходники плюсатые. Пишу с gtkmm + gtkglextmm.

mv ★★★★★
()
Ответ на: комментарий от mv

$ grep glColorTable /usr/include/GL/glext.h
extern void APIENTRY glColorTable (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *);
extern void APIENTRY glColorTableParameterfv (GLenum, GLenum, const GLfloat *);
extern void APIENTRY glColorTableParameteriv (GLenum, GLenum, const GLint *);
extern void APIENTRY glColorTableSGI (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *);
extern void APIENTRY glColorTableParameterfvSGI (GLenum, GLenum, const GLfloat *);
extern void APIENTRY glColorTableParameterivSGI (GLenum, GLenum, const GLint *);
extern void APIENTRY glColorTableEXT (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *);

lazybones
() автор топика
Ответ на: комментарий от mv

>Мешать заголовки и библиотеки разных реализаций opengl чревато

вот и я думаю.
с другой стороны - а что делать ?

lazybones
() автор топика
Ответ на: комментарий от lazybones

Кстати, nvidia-glx у меня тоже стоит

mv ★★★★★
()
Ответ на: комментарий от lazybones

Да, действительно, оно в самом gl.h уже есть...

mv ★★★★★
()
Ответ на: комментарий от lazybones

> Что характерно - сишная прога, юзающая эту же функцию, С теми же заголовками - работает нормально.

Исходники в усечённом варианте в студию.

mv ★★★★★
()
Ответ на: комментарий от mv

#include <QtGui>
#include <QtOpenGL>
#include <QtGui/QImage>
#include <GL/normal.h>
#include <GL/loadtga.h>
#include <GL/glext.h>
#include "fifteenz.h"

Cube_of_color::Cube_of_color(QGLWidget *parent) : QGLWidget(parent)
{
QGLFormat fmt;
fmt.setDoubleBuffer(true);
fmt.setAlphaBufferSize(8);

pbuffer = new QGLPixelBuffer(QSize(640,480), fmt, this);
setWindowTitle(tr("Cube of color"));
rotateX=0;
rotateY=0;
rotateZ=0;
GoX=0;
GoZ=0;
GoY=0;
}

Cube_of_color::~Cube_of_color()
{
delete pbuffer;
}

void Cube_of_color::initializeGL()
{
glClearColor(0.0f , 0.0f, 0.0f,1.0f);
}

void Cube_of_color::resizeGL(int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, (GLfloat) w, 0.0f, (GLfloat) h);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

void Cube_of_color::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
draw();
}

void Cube_of_color::keyPressEvent(QKeyEvent *event)
{

switch(event->key())
{
case Qt::Key_Up :
{
rotateX += 3;
updateGL();
break;
};
case Qt::Key_Down :
{
rotateX -= 3;
updateGL();
break;
};
case Qt::Key_Right :
{
rotateY -= 3;
updateGL();
break;
};
case Qt::Key_Left :
{
rotateY +=3;
updateGL();
break;
};
case Qt::Key_J :
{
rotateZ +=3;
updateGL();
break;
};
case Qt::Key_L :
{
rotateZ -=3;
updateGL();
break;
}
case Qt::Key_W :
{
GoZ -= 1;
updateGL();
break;
};
case Qt::Key_S :
{
GoZ += 1;
updateGL();
break;
};
case Qt::Key_D :
{
GoX += 1;
updateGL();
break;
};
case Qt::Key_A :
{
GoX -= 1;
updateGL();
break;
};
case Qt::Key_E :
{
GoY += 1;
updateGL();
break;
};
case Qt::Key_X :
{
GoY -= 1 ;
updateGL();
break;
};
case Qt::Key_Escape :
{
exit(0);
};
};

}

void Cube_of_color::draw()
{
// PFNGLCOLORTABLEPROC glColorTable = 0;
// glColorTable = (void *(GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid*))gltGetExtensionPointer("glColorTable");
GLbyte *pimage = NULL ;
GLbyte *pBytes = NULL ;
GLenum eFormat;
GLint iViewPort[4], Width, Height, Components ;
static GLubyte invertmap[256][3];
glClear(GL_COLOR_BUFFER_BIT);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
pimage=gltLoadTGA("horse.tga", &Width, &Height, &Components, &eFormat);
if(pimage==NULL)
exit(0);
glRasterPos2i(0, 0);
glGetIntegerv(GL_VIEWPORT,iViewPort);
for(int i = 1 ; i <256 ; i ++)
{
inverttable[i][0] = 255 - i ;
inverttable[i][1] = 255 - i ;
inverttable[i][2] = 255 - i ;
}
glColorTable(GL_COLOR_TABLE, GL_RGB , 256 , GL_RGB, GL_UNSIGNED_BYTE, inverttable);
glEnable(GL_COLOR_TABLE);
glDrawPixels(Width, Height, eFormat, GL_UNSIGNED_BYTE, pimage);
free(pimage);
}


прошу не пинать )

lazybones
() автор топика
Ответ на: комментарий от mv

без этого ? собирается и изображение показывает нормально.

А что ? :)

lazybones
() автор топика
Ответ на: комментарий от lazybones

та же хрень с glConvultion2D блин... и вообще со всеми функциями из glext.h :(

lazybones
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.