Subversion Repositories Kolibri OS

Rev

Rev 4498 | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <sys/time.h>
  5.  
  6. #include <render.h>
  7. #include "gbm.h"
  8. #include <kos32sys.h>
  9.  
  10.  
  11. int main()
  12. {
  13.     struct gbm_device *gbm;
  14.     struct gbm_surface  *gs;
  15.     struct render *render;
  16.  
  17.     EGLDisplay dpy;
  18.     EGLint major, minor;
  19.  
  20.     EGLContext context;
  21.     EGLSurface surface;
  22.  
  23.     EGLConfig config;
  24.  
  25.     EGLint config_attribs[32];
  26.     EGLint num_configs, i;
  27.     int width  = 400;
  28.     int height = 300;
  29.     int skinh;
  30.     int run =1;
  31.  
  32.     int fd;
  33.  
  34.     fd = get_service("DISPLAY");
  35.     gbm = gbm_create_device(fd);
  36.     if( gbm == NULL){
  37.         printf("failed to initialize GBM device");
  38.         return 1;
  39.     };
  40.  
  41.     dpy = eglGetDisplay((EGLNativeDisplayType)gbm);
  42.  
  43.     if (!eglInitialize(dpy, &major, &minor))
  44.         printf("failed to initialize EGL display");
  45.  
  46.     printf("EGL_VERSION = %s\n", eglQueryString(dpy, EGL_VERSION));
  47.     printf("EGL_VENDOR = %s\n", eglQueryString(dpy, EGL_VENDOR));
  48.     printf("EGL_EXTENSIONS = %s\n", eglQueryString(dpy, EGL_EXTENSIONS));
  49.     printf("EGL_CLIENT_APIS = %s\n",eglQueryString(dpy, EGL_CLIENT_APIS));
  50.  
  51.     i = 0;
  52.     config_attribs[i++] = EGL_RED_SIZE;
  53.     config_attribs[i++] = 1;
  54.     config_attribs[i++] = EGL_GREEN_SIZE;
  55.     config_attribs[i++] = 1;
  56.     config_attribs[i++] = EGL_BLUE_SIZE;
  57.     config_attribs[i++] = 1;
  58.     config_attribs[i++] = EGL_DEPTH_SIZE;
  59.     config_attribs[i++] = 1;
  60.  
  61.     config_attribs[i++] = EGL_SURFACE_TYPE;
  62.     config_attribs[i++] = EGL_WINDOW_BIT;
  63.  
  64.     config_attribs[i++] = EGL_RENDERABLE_TYPE;
  65.     config_attribs[i++] = EGL_OPENGL_BIT;
  66.     config_attribs[i] = EGL_NONE;
  67.  
  68.     if (!eglChooseConfig(dpy,config_attribs, &config, 1, &num_configs) || !num_configs)
  69.         printf("failed to choose a config");
  70.  
  71.     eglBindAPI(EGL_OPENGL_API);
  72.     context = eglCreateContext(dpy, config, EGL_NO_CONTEXT, NULL);
  73.     if (!context)
  74.         printf("failed to create context");
  75.  
  76.     gs = gbm_surface_create(gbm, width, height, GBM_BO_FORMAT_ARGB8888, GBM_BO_USE_RENDERING);
  77.  
  78.     skinh = get_skin_height();
  79.  
  80.     BeginDraw();
  81.     DrawWindow(20, 20, width+TYPE_3_BORDER_WIDTH*2,
  82.                height+TYPE_3_BORDER_WIDTH+skinh, "gl-render", 0x000000, 0x74);
  83.     EndDraw();
  84.  
  85.     surface = eglCreateWindowSurface(dpy,config, (EGLNativeWindowType)gs, NULL);
  86.     if (surface == EGL_NO_SURFACE)
  87.         printf("failed to create surface");
  88.  
  89.     if (!eglMakeCurrent(dpy, surface, surface, context))
  90.         printf("failed to make window current");
  91.  
  92.  
  93.     glMatrixMode(GL_PROJECTION);
  94.         glLoadIdentity();
  95.     glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0);
  96.         glMatrixMode(GL_MODELVIEW);
  97.         glLoadIdentity();
  98.  
  99.         glViewport(0, 0, width, height);
  100.  
  101.     glClearColor( 0, 0, 0, 1);
  102.  
  103.     glClear(GL_COLOR_BUFFER_BIT);
  104.  
  105.     glBegin(GL_QUADS);
  106.     glColor3f(1,0,0);
  107.     glVertex3f( 0.9, -0.9, -30.0);
  108.     glColor3f(1,1,0);
  109.     glVertex3f( 0.9,  0.9, -30.0);
  110.  
  111.     glColor3f(1,1,1);
  112.     glVertex3f( 0.1,  0.9, -30.0);
  113.     glColor3f(1,0,1);
  114.     glVertex3f( 0.1, -0.9, -30.0);
  115.     glEnd();
  116.  
  117.     glFlush();
  118.  
  119.  // asm volatile ("int3");
  120.  
  121.     render = create_render(dpy, surface, TYPE_3_BORDER_WIDTH, skinh);
  122.     render_blit(render, PX_BACK);
  123.  
  124.     while (run)
  125.     {
  126.         oskey_t   key;
  127.         int ev;
  128.  
  129.         ev = get_os_event();
  130.         switch(ev)
  131.         {
  132.             case 1:
  133.                 BeginDraw();
  134.                 DrawWindow(0,0,0,0,NULL,0,0x74);
  135.                 EndDraw();
  136.                 render_blit(render, PX_BACK);
  137.                 break;
  138.  
  139.             case 2:
  140.                 key = get_key();
  141.                 if (key.code == 27)
  142.                     run = 0;
  143.                 break;
  144.  
  145.             case 3:
  146.                 if(get_os_button()==1)
  147.                     run = 0;
  148.                 break;
  149.         };
  150.     }
  151.  
  152.  
  153.     glFinish();
  154.     eglMakeCurrent(dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
  155. //    eglDestroySurface(dpy, surface);
  156.   //  gbm_surface_destroy(gs);
  157.     eglDestroyContext(dpy, context);
  158.     eglTerminate(dpy);
  159.  
  160.     return 0;
  161. }
  162.  
  163.  
  164. #if 0
  165. GLuint create_framebuffer(int width, int height, GLuint *tex)
  166. {
  167.     GLuint buffer;
  168.  
  169.     glGenTextures(1, tex);
  170.     glBindTexture(GL_TEXTURE_2D, *tex);
  171.     glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
  172.     glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
  173.  
  174.     glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA,
  175.                                GL_UNSIGNED_BYTE, NULL);
  176.     glBindTexture(GL_TEXTURE_2D, 0);
  177.  
  178.     glGenFramebuffers(1, &buffer);
  179.     glBindFramebuffer(GL_FRAMEBUFFER, buffer);
  180.     glFramebufferTexture2D(GL_FRAMEBUFFER,
  181.                                          GL_COLOR_ATTACHMENT0,
  182.                                          GL_TEXTURE_2D, *tex,0);
  183.    return buffer;
  184. }
  185. #endif
  186.