func Initialize(window egl.NativeWindowType, configAttr, contextAttr []int32) *platform.EGLState { var ( config egl.Config numConfig int32 visualId int32 width, height int32 ) display := egl.GetDisplay(egl.DEFAULT_DISPLAY) if ok := egl.Initialize(display, nil, nil); !ok { egl.LogError(egl.GetError()) } if ok := egl.ChooseConfig(display, configAttr, &config, 1, &numConfig); !ok { egl.LogError(egl.GetError()) } if ok := egl.GetConfigAttrib(display, config, egl.NATIVE_VISUAL_ID, &visualId); !ok { egl.LogError(egl.GetError()) } egl.BindAPI(egl.OPENGL_ES_API) context := egl.CreateContext(display, config, egl.NO_CONTEXT, &contextAttr[0]) surface := egl.CreateWindowSurface(display, config, window, nil) var val int32 if ok := egl.QuerySurface(display, surface, egl.WIDTH, &width); !ok { egl.LogError(egl.GetError()) } if ok := egl.QuerySurface(display, surface, egl.HEIGHT, &height); !ok { egl.LogError(egl.GetError()) } if ok := egl.GetConfigAttrib(display, config, egl.SURFACE_TYPE, &val); !ok { egl.LogError(egl.GetError()) } if ok := egl.GetConfigAttrib(display, config, egl.SURFACE_TYPE, &val); !ok { egl.LogError(egl.GetError()) } if (val & egl.WINDOW_BIT) == 0 { panic("No WINDOW_BIT") } return &platform.EGLState{ Display: display, Config: config, Context: context, Surface: surface, NumConfig: numConfig, VisualId: visualId, ContextAttributes: contextAttr, ConfigAttributes: configAttr, SurfaceWidth: int(width), SurfaceHeight: int(height), } }
func (t *testCreateEGLContextSuite) TestWindowSurface() { egl.BindAPI(egl.OPENGL_ES_API) egl.CreateContext( t.display, t.config, egl.NO_CONTEXT, &contextAttr[0]) surface := egl.CreateWindowSurface( t.display, t.config, testWin, nil) t.True(surface != egl.NO_SURFACE) }
func (t *testCreateEGLContextSuite) TestCreateContext() { context := egl.CreateContext( t.display, t.config, egl.NO_CONTEXT, &contextAttr[0]) t.True(context != egl.NO_CONTEXT) t.True(context != egl.BAD_MATCH) t.True(context != egl.BAD_DISPLAY) t.True(context != egl.NOT_INITIALIZED) t.True(context != egl.BAD_CONFIG) t.True(context != egl.BAD_CONTEXT) t.True(context != egl.BAD_ATTRIBUTE) t.True(context != egl.BAD_ALLOC) }
func Initialize(win unsafe.Pointer, configAttr, contextAttr []int32) *platform.EGLState { eglState := new(platform.EGLState) eglState.Display = getEGLDisp(egl.DEFAULT_DISPLAY) eglState.Config = chooseEGLConfig(eglState.Display, configAttr) eglState.VisualId = getEGLNativeVisualId(eglState.Display, eglState.Config) C.ANativeWindow_setBuffersGeometry((*[0]byte)(win), 0, 0, C.int32_t(eglState.VisualId)) eglState.Surface = EGLCreateWindowSurface(eglState.Display, eglState.Config, egl.NativeWindowType(win)) egl.BindAPI(egl.OPENGL_ES_API) eglState.Context = egl.CreateContext(eglState.Display, eglState.Config, egl.NO_CONTEXT, &contextAttr[0]) eglState.SurfaceWidth = int(C.ANativeWindow_getWidth((*C.ANativeWindow)(win))) eglState.SurfaceHeight = int(C.ANativeWindow_getHeight((*C.ANativeWindow)(win))) return eglState }
func (t *testCreateEGLContextSuite) TestMakeCurrent() { egl.BindAPI(egl.OPENGL_ES_API) context := egl.CreateContext( t.display, t.config, egl.NO_CONTEXT, &contextAttr[0]) surface := egl.CreateWindowSurface( t.display, t.config, testWin, nil) t.True(egl.MakeCurrent( t.display, surface, surface, context, )) }
func (m *mainLoop) frame() { var timeout C.int = 0 if !m.isRunning() { timeout = -1 } ident := C.ALooper_pollAll(timeout, nil, nil, nil) switch ident { case LOOPER_ID_INPUT: if m.inputQ != nil { m.processInput(m.inputQ) } case C.ALOOPER_POLL_ERROR: log.Fatalf("ALooper_pollAll returned ALOOPER_POLL_ERROR\n") } if m.isRunning() { m.checkSize() createCtx := m.renderState.ctx == egl.Context(unsafe.Pointer(nil)) if createCtx { log.Printf("Creating context\n") ctx_attribs := [...]int32{ egl.CONTEXT_CLIENT_VERSION, 2, egl.NONE, } m.renderState.ctx = egl.CreateContext(m.renderState.disp, m.renderState.conf, egl.NO_CONTEXT, &ctx_attribs[0]) if m.renderState.ctx == egl.Context(unsafe.Pointer(nil)) { panic("Error: eglCreateContext failed\n") } } if !egl.MakeCurrent(m.renderState.disp, m.renderState.surf, m.renderState.surf, m.renderState.ctx) { panic("Error: eglMakeCurrent() failed\n") } if createCtx { m.game.initGL() } m.game.drawFrame() egl.SwapBuffers(m.renderState.disp, m.renderState.surf) } }
func Initialize(configAttr, contextAttr []int32) *platform.EGLState { var ( config egl.Config numConfig int32 visualId int32 width, height int32 dstRect, srcRect egl.VCRect nativeWindow egl.EGLDispmanxWindow ) display := egl.GetDisplay(egl.DEFAULT_DISPLAY) if ok := egl.Initialize(egl.Display, nil, nil); !ok { egl.LogError(egl.GetError()) } if ok := egl.ChooseConfig(display, configAttr, &config, 1, &numConfig); !ok { egl.LogError(egl.GetError()) } if ok := egl.GetConfigAttrib(display, config, egl.NATIVE_VISUAL_ID, &visualId); !ok { egl.LogError(egl.GetError()) } egl.BindAPI(egl.OPENGL_ES_API) context := egl.CreateContext(display, config, egl.NO_CONTEXT, &contextAttr[0]) width, height = egl.GraphicsGetDisplaySize(0) dstRect.X = 0 dstRect.Y = 0 dstRect.Width = int32(width) dstRect.Height = int32(height) srcRect.X = 0 srcRect.Y = 0 srcRect.Width = int32(width << 16) srcRect.Height = int32(height << 16) dispman_display := egl.VCDispmanxDisplayOpen(0) dispman_update := egl.VCDispmanxUpdateStart(0) dispman_element := egl.VCDispmanxElementAdd( dispman_update, dispman_display, 0, /*layer */ &dstRect, 0, /*src */ &srcRect, egl.DISPMANX_PROTECTION_NONE, nil, /*alpha */ nil, /*clamp */ 0 /*transform */) nativeWindow.Element = dispman_element nativeWindow.Width = int(width) nativeWindow.Height = int(height) egl.VCDispmanxUpdateSubmitSync(dispman_update) surface := egl.CreateWindowSurface( display, config, egl.NativeWindowType(unsafe.Pointer(&nativeWindow)), nil) if surface == egl.NO_SURFACE { panic("Error in creating EGL surface") } return &platform.EGLState{ Display: display, Config: config, Context: context, Surface: surface, NumConfig: numConfig, VisualId: visualId, ContextAttributes: contextAttr, ConfigAttributes: configAttr, SurfaceWidth: int(width), SurfaceHeight: int(height), } }