AROSMesaGetProcAddress?

serk118uk · 4604

serk118uk

  • Member
  • ***
    • Posts: 187
    • Karma: +67/-0
on: October 04, 2022, 04:26:38 PM
hi ppl,

I am trying to compile little tool , download glew sourcecode from aros-archives, and i am not sure why i get AROSMesaGetProcAddress as undefined ,   libglew.should cover that but something not right..
 
gcc -g -Wall -Wno-deprecated -I../util/ drawbuffers.o -o main -lm -lglut -lGLU -lgl -lglew
There are undefined symbols in 'main':
AROSMesaGetProcAddress
make: *** [main] Error 1

thanks any help welcome

Lets Build Not Destroy...


deadwood

  • AROS Developer
  • Legendary Member
  • *****
    • Posts: 1524
    • Karma: +118/-0
Reply #1 on: October 05, 2022, 12:22:56 AM
Try this:

gcc -g -Wall -Wno-deprecated -I../util/ drawbuffers.o -o main -lglut  -lglew -lmesa -lgl -lGLU -lm



serk118uk

  • Member
  • ***
    • Posts: 187
    • Karma: +67/-0
Reply #2 on: October 05, 2022, 04:06:59 AM
Try this:

gcc -g -Wall -Wno-deprecated -I../util/ drawbuffers.o -o main -lglut  -lglew -lmesa -lgl -lGLU -lm

still same on my end

makefile
Quote
CC = gcc
LIBS =-lglut -lglew -lmesa -lgl -lGLU -lm
CFLAGS =-g -Wall -Wno-deprecated

main: drawbuffers.o
   $(CC) $(CFLAGS) $< -o $@ $(LIBS)

%.o: %.cpp
   $(CC) $(CFLAGS) -c $<

clean:
   -rm -f *.o


drawbuffers.c
Quote
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <GL/glew.h>

#ifdef __AROS__
#include <GL/glut.h>

#ifndef GLAPIENTRY
#define GLAPIENTRY
#endif

#else
#include "glut_wrap.h"
#endif

static int Win;
static int Width = 400, Height = 400;
static GLuint FBobject, RBobjects[3];
static GLfloat Xrot = 0.0, Yrot = 0.0;
static GLuint Program;


static void CheckError(int line)
{
   GLenum err = glGetError();
   if (err) {
      printf("GL Error 0x%x at line %d\n", (int) err, line);
   }
}


static void Display(void)
{
   GLubyte *buffer = malloc(Width * Height * 4);
   static const GLenum buffers[2] = {
      GL_COLOR_ATTACHMENT0_EXT,
      GL_COLOR_ATTACHMENT1_EXT
   };

   glUseProgram(Program);

   glEnable(GL_DEPTH_TEST);

   /* draw to user framebuffer */
   glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, FBobject);

   /* Clear color buffer 0 (blue) */
   glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
   glClearColor(0.5, 0.5, 1.0, 0.0);
   glClear(GL_COLOR_BUFFER_BIT);

   /* Clear color buffer 1 (1 - blue) */
   glDrawBuffer(GL_COLOR_ATTACHMENT1_EXT);
   glClearColor(0.5, 0.5, 0.0, 0.0);
   glClear(GL_COLOR_BUFFER_BIT);

   glClear(GL_DEPTH_BUFFER_BIT);

   /* draw to two buffers w/ fragment shader */
   glDrawBuffersARB(2, buffers);

   glPushMatrix();
   glRotatef(Xrot, 1, 0, 0);
   glRotatef(Yrot, 0, 1, 0);
   glutSolidTorus(0.75, 2.0, 10, 20);
   glPopMatrix();

   /* read from user framebuffer */
   /* left half = colorbuffer 0 */
   glReadBuffer(GL_COLOR_ATTACHMENT0_EXT);
   glPixelStorei(GL_PACK_ROW_LENGTH, Width);
   glPixelStorei(GL_PACK_SKIP_PIXELS, 0);
   glReadPixels(0, 0, Width / 2, Height, GL_RGBA, GL_UNSIGNED_BYTE,
                buffer);

   /* right half = colorbuffer 1 */
   glReadBuffer(GL_COLOR_ATTACHMENT1_EXT);
   glPixelStorei(GL_PACK_SKIP_PIXELS, Width / 2);
   glReadPixels(Width / 2, 0, Width - Width / 2, Height,
   GL_RGBA, GL_UNSIGNED_BYTE,buffer);

   /* draw to window */
   glUseProgram(0);
   glDisable(GL_DEPTH_TEST);
   glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
   glWindowPos2iARB(0, 0);
   glDrawPixels(Width, Height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);

   free(buffer);
   glutSwapBuffers();
   CheckError(__LINE__);
}


static void Reshape(int width, int height)
{
   float ar = (float) width / (float) height;

   glViewport(0, 0, width, height);
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   glFrustum(-ar, ar, -1.0, 1.0, 5.0, 35.0);
   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();
   glTranslatef(0.0, 0.0, -20.0);

   Width = width;
   Height = height;

   glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, RBobjects[0]);
   glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGB, Width, Height);
   glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, RBobjects[1]);
   glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGB, Width, Height);
   glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, RBobjects[2]);
   glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT,Width, Height);
}


static void CleanUp(void)
{
   glDeleteFramebuffersEXT(1, &FBobject);
   glDeleteRenderbuffersEXT(3, RBobjects);
   glutDestroyWindow(Win);
   exit(0);
}


static void Key(unsigned char key, int x, int y)
{
   (void) x;
   (void) y;
   switch (key) {
      case 'x':
         Xrot += 5.0;
         break;
      case 'y':
         Yrot += 5.0;
         break;
      case 27:
         CleanUp();
         break;
   }
   glutPostRedisplay();
}


static void CheckExtensions(void)
{
   GLint numBuf;

   if (!GLEW_EXT_framebuffer_object) {
      printf("Sorry, GL_EXT_framebuffer_object is required!\n");
      exit(1);
   }
   if (!GLEW_ARB_draw_buffers) {
      printf("Sorry, GL_ARB_draw_buffers is required!\n");
      exit(1);
   }
   if (!GLEW_VERSION_2_0) {
      printf("Sorry, OpenGL 2.0 is required!\n");
      exit(1);
   }

   glGetIntegerv(GL_MAX_DRAW_BUFFERS_ARB, &numBuf);
   printf("GL_MAX_DRAW_BUFFERS_ARB = %d\n", numBuf);
   if (numBuf < 2) {
      printf("Sorry, GL_MAX_DRAW_BUFFERS_ARB needs to be >= 2\n");
      exit(1);
   }

   printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));
}


static void SetupRenderbuffers(void)
{
   glGenFramebuffersEXT(1, &FBobject);
   glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, FBobject);

   glGenRenderbuffersEXT(3, RBobjects);

   glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, RBobjects[0]);
   glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGB, Width, Height);

   glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, RBobjects[1]);
   glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGB, Width, Height);

   glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, RBobjects[2]);
   glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT,
                            Width, Height);

   glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
                                GL_RENDERBUFFER_EXT, RBobjects[0]);
   glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT1_EXT,
                                GL_RENDERBUFFER_EXT, RBobjects[1]);
   glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT,
                                GL_RENDERBUFFER_EXT, RBobjects[2]);

   CheckError(__LINE__);
}


static GLuint LoadAndCompileShader(GLenum target, const char *text)
{
   GLint stat;
   GLuint shader = glCreateShader(target);
   glShaderSource(shader, 1, (const GLchar **) &text, NULL);
   glCompileShader(shader);
   glGetShaderiv(shader, GL_COMPILE_STATUS, &stat);
   if (!stat) {
      GLchar log[1000];
      GLsizei len;
      glGetShaderInfoLog(shader, 1000, &len, log);
      fprintf(stderr, "drawbuffers: problem compiling shader:\n%s\n", log);
      exit(1);
   }
   return shader;
}


static void CheckLink(GLuint prog)
{
   GLint stat;
   glGetProgramiv(prog, GL_LINK_STATUS, &stat);
   if (!stat) {
      GLchar log[1000];
      GLsizei len;
      glGetProgramInfoLog(prog, 1000, &len, log);
      fprintf(stderr, "drawbuffers: shader link error:\n%s\n", log);
   }
}


static void SetupShaders(void)
{
   /* second color output = 1 - first color */
   static const char *fragShaderText =
      "void main() {\n"
      "   gl_FragData[0] = gl_Color; \n"
      "   gl_FragData[1] = vec4(1.0) - gl_Color; \n"
      "}\n";

   GLuint fragShader;

   fragShader = LoadAndCompileShader(GL_FRAGMENT_SHADER, fragShaderText);
   Program = glCreateProgram();

   glAttachShader(Program, fragShader);
   glLinkProgram(Program);
   CheckLink(Program);
   glUseProgram(Program);
}


static void SetupLighting(void)
{
   static const GLfloat frontMat[4] = { 1.0, 0.5, 0.5, 1.0 };
   static const GLfloat backMat[4] = { 1.0, 0.5, 0.5, 1.0 };

   glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, frontMat);
   glMaterialfv(GL_BACK, GL_AMBIENT_AND_DIFFUSE, backMat);
   glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 1);
   glEnable(GL_LIGHT0);
   glEnable(GL_LIGHTING);
}


static void Init(void)
{
   CheckExtensions();
   SetupRenderbuffers();
   SetupShaders();
   SetupLighting();
   glEnable(GL_DEPTH_TEST);
}


int main(int argc, char *argv[])
{
   glutInit(&argc, argv);
   glutInitWindowPosition(0, 0);
   glutInitWindowSize(Width, Height);
   glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
   Win = glutCreateWindow(argv[0]);
   glewInit();
   glutReshapeFunc(Reshape);
   glutKeyboardFunc(Key);
   glutDisplayFunc(Display);
   Init();
   glutMainLoop();
   return 0;
}

Lets Build Not Destroy...


deadwood

  • AROS Developer
  • Legendary Member
  • *****
    • Posts: 1524
    • Karma: +118/-0
Reply #3 on: October 05, 2022, 10:43:25 AM
Hmm, you are right.

Try adding this into your code file:

Code: [Select]
APTR AROSMesaGetProcAddress(const GLubyte * procname)
{
     return AROSMesaGetProcAddressInternal(procname)
}



serk118uk

  • Member
  • ***
    • Posts: 187
    • Karma: +67/-0
Reply #4 on: October 06, 2022, 08:22:01 AM
Hmm, you are right.

Try adding this into your code file:

Code: [Select]
APTR AROSMesaGetProcAddress(const GLubyte * procname)
{
     return AROSMesaGetProcAddressInternal(procname)
}


Above code failed, i searched lib/ include files too but not found anything about AROSMesagetProcAddressInternal() but
i found another function does works.

#ifdef __AROS__
#include <GL/glut.h>
#include <exec/types.h>

APTR AROSMesaGetProcAddress(const GLubyte *procname);

APTR AROSMesaGetProcAddress(const GLubyte *procname)
{
 return glAGetProcAddress(procname); //works
//return AROSMesaGetProcAddressInternal(procname);
}
#endif

which version of opengl we have ? and also i need deep down info about aros version of mesa / gl /egl  , is there info page or link?

thanks

Lets Build Not Destroy...


deadwood

  • AROS Developer
  • Legendary Member
  • *****
    • Posts: 1524
    • Karma: +118/-0
Reply #5 on: October 06, 2022, 09:42:08 AM
It's actually better. AROSMesaXXX is and old API that is still supported. New API is glAXXX. It looks like the linklib you got from archives got compiled for old API. Would be nice if you found time to rebuild that link-lib from new API and upload to archives.

About OpenGL - this depends on driver itself. Software driver usually gets higher OpenGL version that NVidia.

About Mesa - looking at the source code it is Mesa 7.10



serk118uk

  • Member
  • ***
    • Posts: 187
    • Karma: +67/-0
Reply #6 on: October 25, 2022, 12:00:08 PM
It's actually better. AROSMesaXXX is and old API that is still supported. New API is glAXXX. It looks like the linklib you got from archives got compiled for old API. Would be nice if you found time to rebuild that link-lib from new API and upload to archives.

About OpenGL - this depends on driver itself. Software driver usually gets higher OpenGL version that NVidia.

About Mesa - looking at the source code it is Mesa 7.10

deadwood I have recompiled but i can not upload because glew version on A-E was compiled by "Yannick Erb" and i can not replace the file.

BTW libGLFW 2.6 port done, its on ArosArchives uploads, latest version in progress...

Lets Build Not Destroy...


deadwood

  • AROS Developer
  • Legendary Member
  • *****
    • Posts: 1524
    • Karma: +118/-0
Reply #7 on: October 25, 2022, 11:12:43 PM

deadwood I have recompiled but i can not upload because glew version on A-E was compiled by "Yannick Erb" and i can not replace the file.


Great! Please upload glew without trying to replace Yannick's version and I will take care of cleaning up archives.



deadwood

  • AROS Developer
  • Legendary Member
  • *****
    • Posts: 1524
    • Karma: +118/-0
Reply #8 on: October 26, 2022, 10:24:14 AM
Ok, both approved now.



AMIGASYSTEM

  • Global Moderator
  • Legendary Member
  • *****
    • Posts: 3762
    • Karma: +69/-2
  • AROS One
    • AROS One
Reply #9 on: October 26, 2022, 11:51:55 AM
serk successfully tested your libraries on AROS One x86