eleni@0: #include eleni@0: #include eleni@0: #include eleni@0: #include eleni@0: eleni@0: #include eleni@0: #include eleni@0: #include eleni@0: #include eleni@0: #include eleni@0: #include eleni@0: #include eleni@0: eleni@0: #include eleni@0: #include eleni@0: #include eleni@0: #include eleni@0: #include eleni@0: #include eleni@0: #include eleni@0: #include eleni@0: #include eleni@0: eleni@0: #include "drmtest.h" eleni@0: eleni@0: int fd = -1; eleni@0: static struct gbm_device *gbm_dev; eleni@0: struct gbm_bo *bo; eleni@0: struct gbm_surface *gbm_surf; eleni@0: eleni@0: int main(int argc, char **argv) eleni@0: { eleni@0: // if((fd = open("/dev/dri/card0", O_RDWR) == -1)) { eleni@0: // fprintf(stderr, "can't open device: %s\n", strerror(errno)); eleni@0: // exit(1); eleni@0: // } eleni@0: if((fd = drm_open_any()) == - 1) { eleni@0: fprintf(stderr, "can't open device: %s\n", strerror(errno)); eleni@0: exit(1); eleni@0: } eleni@0: eleni@0: printf("fd: %d\n", fd); eleni@0: eleni@0: if(!(gbm_dev = gbm_create_device(fd))) { eleni@0: fprintf(stderr, "can't create gbm device: %s\n", strerror(errno)); eleni@0: exit(1); eleni@0: } eleni@0: eleni@0: if(!(gbm_surf = gbm_surface_create(gbm_dev, 640, 480, GBM_BO_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING))) { eleni@0: fprintf(stderr, "can't create gbm surface: %s\n", strerror(errno)); eleni@0: exit(1); eleni@0: } eleni@0: eleni@0: EGLDisplay dpy; eleni@0: dpy = eglGetDisplay((_XDisplay*)gbm_dev); eleni@0: EGLint major, minor; eleni@0: eleni@0: //const char *ver; eleni@0: const char *extensions; eleni@0: eglInitialize(dpy, &major, &minor); eleni@0: //ver = eglQueryString(dpy, EGL_VERSION); eleni@0: extensions = eglQueryString(dpy, EGL_EXTENSIONS); eleni@0: eleni@0: if (!strstr(extensions, "EGL_KHR_surfaceless_context")) { eleni@0: fprintf(stderr, "no surfaceless support, cannot initialize\n"); eleni@0: exit(1); eleni@0: } eleni@0: eleni@0: SDL_Window *win; eleni@0: SDL_GLContext ctx; eleni@0: eleni@0: if(SDL_Init(SDL_INIT_VIDEO) == -1) { eleni@0: fprintf(stderr, "failed to initialize sdl\n"); eleni@0: return 1; eleni@0: } eleni@0: eleni@0: SDL_GL_SetAttribute(SDL_GL_CONTEXT_EGL, 1); eleni@0: SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); eleni@0: SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0); eleni@0: SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); eleni@0: SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); eleni@0: SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); eleni@0: SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24); eleni@0: SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); eleni@0: //SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); eleni@0: eleni@0: if(!(bo = gbm_bo_create(gbm_dev, 640, 480, GBM_BO_FORMAT_XRGB8888, GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING))) { eleni@0: fprintf(stderr, "Unable to create gbm buffer object!\n"); eleni@0: } eleni@0: eleni@0: win = SDL_CreateWindow("foo", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, eleni@0: SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN); eleni@0: eleni@0: if(!win) { eleni@0: fprintf(stderr, "failed to create window: %s\n", SDL_GetError()); eleni@0: return 1; eleni@0: } eleni@0: eleni@0: if(!(ctx = SDL_GL_CreateContext(win))) { eleni@0: fprintf(stderr, "failed to create OpenGL context: %s\n", SDL_GetError()); eleni@0: return 1; eleni@0: } eleni@0: eleni@0: glClearColor(1.0, 0.0, 0.0, 1.0); eleni@0: glClear(GL_COLOR_BUFFER_BIT); eleni@0: eleni@0: SDL_GL_SwapWindow(win); eleni@0: SDL_Delay(5000); eleni@0: eleni@0: gbm_device_destroy(gbm_dev); eleni@0: SDL_GL_DeleteContext(win); eleni@0: SDL_DestroyWindow(win); eleni@0: SDL_Quit(); eleni@0: return 0; eleni@0: }