MCPcopy Create free account
hub / github.com/Farama-Foundation/Stable-Retro / init

Method init

src/hwrender.cpp:51–126  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

49}
50
51bool HWRenderContext::init(const retro_hw_render_callback& cb) {
52 std::cerr << "HWRender: init() called, context_type=" << cb.context_type << std::endl;
53 // Only support OpenGL contexts for now
54 if (cb.context_type != RETRO_HW_CONTEXT_OPENGL &&
55 cb.context_type != RETRO_HW_CONTEXT_OPENGL_CORE &&
56 cb.context_type != RETRO_HW_CONTEXT_OPENGLES2 &&
57 cb.context_type != RETRO_HW_CONTEXT_OPENGLES3 &&
58 cb.context_type != RETRO_HW_CONTEXT_OPENGLES_VERSION) {
59 std::cerr << "HWRender: Unsupported context type " << cb.context_type << std::endl;
60 return false;
61 }
62
63 m_callback = cb;
64
65 std::cerr << "HWRender: calling initEGL()..." << std::endl;
66 if (!initEGL()) {
67 std::cerr << "HWRender: EGL failed, trying GLX fallback..." << std::endl;
68 if (!initGLX()) {
69 std::cerr << "HWRender: Both EGL and GLX failed" << std::endl;
70 return false;
71 }
72 std::cerr << "HWRender: initGLX() succeeded" << std::endl;
73 } else {
74 std::cerr << "HWRender: initEGL() succeeded" << std::endl;
75 }
76
77 // Load GL extension functions based on backend
78 if (m_backend == GLBackend::EGL) {
79 glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)eglGetProcAddress("glGenFramebuffers");
80 glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)eglGetProcAddress("glBindFramebuffer");
81 glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)eglGetProcAddress("glDeleteFramebuffers");
82 glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)eglGetProcAddress("glFramebufferTexture2D");
83 glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC)eglGetProcAddress("glFramebufferRenderbuffer");
84 glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC)eglGetProcAddress("glCheckFramebufferStatus");
85 glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC)eglGetProcAddress("glGenRenderbuffers");
86 glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC)eglGetProcAddress("glBindRenderbuffer");
87 glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC)eglGetProcAddress("glRenderbufferStorage");
88 glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)eglGetProcAddress("glDeleteRenderbuffers");
89 } else {
90 glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)glXGetProcAddressARB((const GLubyte*)"glGenFramebuffers");
91 glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)glXGetProcAddressARB((const GLubyte*)"glBindFramebuffer");
92 glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)glXGetProcAddressARB((const GLubyte*)"glDeleteFramebuffers");
93 glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)glXGetProcAddressARB((const GLubyte*)"glFramebufferTexture2D");
94 glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC)glXGetProcAddressARB((const GLubyte*)"glFramebufferRenderbuffer");
95 glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC)glXGetProcAddressARB((const GLubyte*)"glCheckFramebufferStatus");
96 glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC)glXGetProcAddressARB((const GLubyte*)"glGenRenderbuffers");
97 glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC)glXGetProcAddressARB((const GLubyte*)"glBindRenderbuffer");
98 glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC)glXGetProcAddressARB((const GLubyte*)"glRenderbufferStorage");
99 glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)glXGetProcAddressARB((const GLubyte*)"glDeleteRenderbuffers");
100 }
101
102 if (!glGenFramebuffers || !glBindFramebuffer) {
103 std::cerr << "HWRender: Failed to load GL functions" << std::endl;
104 if (m_backend == GLBackend::EGL) destroyEGL();
105 else destroyGLX();
106 return false;
107 }
108

Callers 2

getMethod · 0.45
cbEnvironmentMethod · 0.45

Calls

no outgoing calls

Tested by

no test coverage detected