Commit 0c83813f by Clemen Deng Committed by Commit Bot

Implement core wgl functions

- wglSwapBuffers - wglCreateContext - wglMakeCurrent These functions are needed by the OpenGL tutorial for Windows desktop Bug: angleproject:3620 Change-Id: I699af63eca4a2c8aaf2c72278a580322410ac499 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1688499 Commit-Queue: Clemen Deng <clemendeng@google.com> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent 97123e3f
......@@ -387,6 +387,18 @@ Display *Display::GetDisplayFromNativeDisplay(EGLNativeDisplayType nativeDisplay
}
// static
Display *Display::GetExistingDisplayFromNativeDisplay(EGLNativeDisplayType nativeDisplay)
{
ANGLEPlatformDisplayMap *displays = GetANGLEPlatformDisplayMap();
const auto &iter = displays->find(nativeDisplay);
// Check that there is a matching display
ASSERT(iter != displays->end());
return iter->second;
}
// static
Display *Display::GetDisplayFromDevice(Device *device, const AttributeMap &attribMap)
{
Display *display = nullptr;
......@@ -447,6 +459,7 @@ Display::Display(EGLenum platform, EGLNativeDisplayType displayId, Device *eglDe
mDisplayExtensionString(),
mVendorString(),
mDevice(eglDevice),
mSurface(nullptr),
mPlatform(platform),
mTextureManager(nullptr),
mBlobCache(gl::kDefaultMaxProgramCacheMemoryBytes),
......@@ -739,6 +752,8 @@ Error Display::createWindowSurface(const Config *configuration,
ASSERT(windowSurfaces && windowSurfaces->find(window) == windowSurfaces->end());
windowSurfaces->insert(std::make_pair(window, *outSurface));
mSurface = *outSurface;
return NoError();
}
......@@ -1397,6 +1412,11 @@ Device *Display::getDevice() const
return mDevice;
}
Surface *Display::getWGLSurface() const
{
return mSurface;
}
gl::Version Display::getMaxSupportedESVersion() const
{
return mImplementation->getMaxSupportedESVersion();
......
......@@ -81,6 +81,7 @@ class Display final : public LabeledObject, angle::NonCopyable
static Display *GetDisplayFromDevice(Device *device, const AttributeMap &attribMap);
static Display *GetDisplayFromNativeDisplay(EGLNativeDisplayType nativeDisplay,
const AttributeMap &attribMap);
static Display *GetExistingDisplayFromNativeDisplay(EGLNativeDisplayType nativeDisplay);
static const ClientExtensions &GetClientExtensions();
static const std::string &GetClientExtensionString();
......@@ -193,6 +194,7 @@ class Display final : public LabeledObject, angle::NonCopyable
rx::DisplayImpl *getImplementation() const { return mImplementation; }
Device *getDevice() const;
Surface *getWGLSurface() const;
EGLenum getPlatform() const { return mPlatform; }
gl::Version getMaxSupportedESVersion() const;
......@@ -254,6 +256,7 @@ class Display final : public LabeledObject, angle::NonCopyable
std::string mVendorString;
Device *mDevice;
Surface *mSurface;
EGLenum mPlatform;
angle::LoggingAnnotator mAnnotator;
......
; GENERATED FILE - DO NOT EDIT.
; Generated by generate_entry_points.py using data from Khronos and ANGLE XML files.
;
; Copyright 2019 The ANGLE Project Authors. All rights reserved.
; Use of this source code is governed by a BSD-style license that can be
; found in the LICENSE file.
LIBRARY openGL32
EXPORTS
; GL 1.0
glAccum
glAlphaFunc
glBegin
glBitmap
glBlendFunc
glCallList
glCallLists
glClear
glClearAccum
glClearColor
glClearDepth
glClearIndex
glClearStencil
glClipPlane
glColor3b
glColor3bv
glColor3d
glColor3dv
glColor3f
glColor3fv
glColor3i
glColor3iv
glColor3s
glColor3sv
glColor3ub
glColor3ubv
glColor3ui
glColor3uiv
glColor3us
glColor3usv
glColor4b
glColor4bv
glColor4d
glColor4dv
glColor4f
glColor4fv
glColor4i
glColor4iv
glColor4s
glColor4sv
glColor4ub
glColor4ubv
glColor4ui
glColor4uiv
glColor4us
glColor4usv
glColorMask
glColorMaterial
glCopyPixels
glCullFace
glDeleteLists
glDepthFunc
glDepthMask
glDepthRange
glDisable
glDrawBuffer
glDrawPixels
glEdgeFlag
glEdgeFlagv
glEnable
glEnd
glEndList
glEvalCoord1d
glEvalCoord1dv
glEvalCoord1f
glEvalCoord1fv
glEvalCoord2d
glEvalCoord2dv
glEvalCoord2f
glEvalCoord2fv
glEvalMesh1
glEvalMesh2
glEvalPoint1
glEvalPoint2
glFeedbackBuffer
glFinish
glFlush
glFogf
glFogfv
glFogi
glFogiv
glFrontFace
glFrustum
glGenLists
glGetBooleanv
glGetClipPlane
glGetDoublev
glGetError
glGetFloatv
glGetIntegerv
glGetLightfv
glGetLightiv
glGetMapdv
glGetMapfv
glGetMapiv
glGetMaterialfv
glGetMaterialiv
glGetPixelMapfv
glGetPixelMapuiv
glGetPixelMapusv
glGetPolygonStipple
glGetString
glGetTexEnvfv
glGetTexEnviv
glGetTexGendv
glGetTexGenfv
glGetTexGeniv
glGetTexImage
glGetTexLevelParameterfv
glGetTexLevelParameteriv
glGetTexParameterfv
glGetTexParameteriv
glHint
glIndexMask
glIndexd
glIndexdv
glIndexf
glIndexfv
glIndexi
glIndexiv
glIndexs
glIndexsv
glInitNames
glIsEnabled
glIsList
glLightModelf
glLightModelfv
glLightModeli
glLightModeliv
glLightf
glLightfv
glLighti
glLightiv
glLineStipple
glLineWidth
glListBase
glLoadIdentity
glLoadMatrixd
glLoadMatrixf
glLoadName
glLogicOp
glMap1d
glMap1f
glMap2d
glMap2f
glMapGrid1d
glMapGrid1f
glMapGrid2d
glMapGrid2f
glMaterialf
glMaterialfv
glMateriali
glMaterialiv
glMatrixMode
glMultMatrixd
glMultMatrixf
glNewList
glNormal3b
glNormal3bv
glNormal3d
glNormal3dv
glNormal3f
glNormal3fv
glNormal3i
glNormal3iv
glNormal3s
glNormal3sv
glOrtho
glPassThrough
glPixelMapfv
glPixelMapuiv
glPixelMapusv
glPixelStoref
glPixelStorei
glPixelTransferf
glPixelTransferi
glPixelZoom
glPointSize
glPolygonMode
glPolygonStipple
glPopAttrib
glPopMatrix
glPopName
glPushAttrib
glPushMatrix
glPushName
glRasterPos2d
glRasterPos2dv
glRasterPos2f
glRasterPos2fv
glRasterPos2i
glRasterPos2iv
glRasterPos2s
glRasterPos2sv
glRasterPos3d
glRasterPos3dv
glRasterPos3f
glRasterPos3fv
glRasterPos3i
glRasterPos3iv
glRasterPos3s
glRasterPos3sv
glRasterPos4d
glRasterPos4dv
glRasterPos4f
glRasterPos4fv
glRasterPos4i
glRasterPos4iv
glRasterPos4s
glRasterPos4sv
glReadBuffer
glReadPixels
glRectd
glRectdv
glRectf
glRectfv
glRecti
glRectiv
glRects
glRectsv
glRenderMode
glRotated
glRotatef
glScaled
glScalef
glScissor
glSelectBuffer
glShadeModel
glStencilFunc
glStencilMask
glStencilOp
glTexCoord1d
glTexCoord1dv
glTexCoord1f
glTexCoord1fv
glTexCoord1i
glTexCoord1iv
glTexCoord1s
glTexCoord1sv
glTexCoord2d
glTexCoord2dv
glTexCoord2f
glTexCoord2fv
glTexCoord2i
glTexCoord2iv
glTexCoord2s
glTexCoord2sv
glTexCoord3d
glTexCoord3dv
glTexCoord3f
glTexCoord3fv
glTexCoord3i
glTexCoord3iv
glTexCoord3s
glTexCoord3sv
glTexCoord4d
glTexCoord4dv
glTexCoord4f
glTexCoord4fv
glTexCoord4i
glTexCoord4iv
glTexCoord4s
glTexCoord4sv
glTexEnvf
glTexEnvfv
glTexEnvi
glTexEnviv
glTexGend
glTexGendv
glTexGenf
glTexGenfv
glTexGeni
glTexGeniv
glTexImage1D
glTexImage2D
glTexParameterf
glTexParameterfv
glTexParameteri
glTexParameteriv
glTranslated
glTranslatef
glVertex2d
glVertex2dv
glVertex2f
glVertex2fv
glVertex2i
glVertex2iv
glVertex2s
glVertex2sv
glVertex3d
glVertex3dv
glVertex3f
glVertex3fv
glVertex3i
glVertex3iv
glVertex3s
glVertex3sv
glVertex4d
glVertex4dv
glVertex4f
glVertex4fv
glVertex4i
glVertex4iv
glVertex4s
glVertex4sv
glViewport
; GL 1.1
glAreTexturesResident
glArrayElement
glBindTexture
glColorPointer
glCopyTexImage1D
glCopyTexImage2D
glCopyTexSubImage1D
glCopyTexSubImage2D
glDeleteTextures
glDisableClientState
glDrawArrays
glDrawElements
glEdgeFlagPointer
glEnableClientState
glGenTextures
glGetPointerv
glIndexPointer
glIndexub
glIndexubv
glInterleavedArrays
glIsTexture
glNormalPointer
glPolygonOffset
glPopClientAttrib
glPrioritizeTextures
glPushClientAttrib
glTexCoordPointer
glTexSubImage1D
glTexSubImage2D
glVertexPointer
; GL 1.2
glCopyTexSubImage3D
glDrawRangeElements
glTexImage3D
glTexSubImage3D
; GL 1.3
glActiveTexture
glClientActiveTexture
glCompressedTexImage1D
glCompressedTexImage2D
glCompressedTexImage3D
glCompressedTexSubImage1D
glCompressedTexSubImage2D
glCompressedTexSubImage3D
glGetCompressedTexImage
glLoadTransposeMatrixd
glLoadTransposeMatrixf
glMultTransposeMatrixd
glMultTransposeMatrixf
glMultiTexCoord1d
glMultiTexCoord1dv
glMultiTexCoord1f
glMultiTexCoord1fv
glMultiTexCoord1i
glMultiTexCoord1iv
glMultiTexCoord1s
glMultiTexCoord1sv
glMultiTexCoord2d
glMultiTexCoord2dv
glMultiTexCoord2f
glMultiTexCoord2fv
glMultiTexCoord2i
glMultiTexCoord2iv
glMultiTexCoord2s
glMultiTexCoord2sv
glMultiTexCoord3d
glMultiTexCoord3dv
glMultiTexCoord3f
glMultiTexCoord3fv
glMultiTexCoord3i
glMultiTexCoord3iv
glMultiTexCoord3s
glMultiTexCoord3sv
glMultiTexCoord4d
glMultiTexCoord4dv
glMultiTexCoord4f
glMultiTexCoord4fv
glMultiTexCoord4i
glMultiTexCoord4iv
glMultiTexCoord4s
glMultiTexCoord4sv
glSampleCoverage
; GL 1.4
glBlendColor
glBlendEquation
glBlendFuncSeparate
glFogCoordPointer
glFogCoordd
glFogCoorddv
glFogCoordf
glFogCoordfv
glMultiDrawArrays
glMultiDrawElements
glPointParameterf
glPointParameterfv
glPointParameteri
glPointParameteriv
glSecondaryColor3b
glSecondaryColor3bv
glSecondaryColor3d
glSecondaryColor3dv
glSecondaryColor3f
glSecondaryColor3fv
glSecondaryColor3i
glSecondaryColor3iv
glSecondaryColor3s
glSecondaryColor3sv
glSecondaryColor3ub
glSecondaryColor3ubv
glSecondaryColor3ui
glSecondaryColor3uiv
glSecondaryColor3us
glSecondaryColor3usv
glSecondaryColorPointer
glWindowPos2d
glWindowPos2dv
glWindowPos2f
glWindowPos2fv
glWindowPos2i
glWindowPos2iv
glWindowPos2s
glWindowPos2sv
glWindowPos3d
glWindowPos3dv
glWindowPos3f
glWindowPos3fv
glWindowPos3i
glWindowPos3iv
glWindowPos3s
glWindowPos3sv
; GL 1.5
glBeginQuery
glBindBuffer
glBufferData
glBufferSubData
glDeleteBuffers
glDeleteQueries
glEndQuery
glGenBuffers
glGenQueries
glGetBufferParameteriv
glGetBufferPointerv
glGetBufferSubData
glGetQueryObjectiv
glGetQueryObjectuiv
glGetQueryiv
glIsBuffer
glIsQuery
glMapBuffer
glUnmapBuffer
; GL 2.0
glAttachShader
glBindAttribLocation
glBlendEquationSeparate
glCompileShader
glCreateProgram
glCreateShader
glDeleteProgram
glDeleteShader
glDetachShader
glDisableVertexAttribArray
glDrawBuffers
glEnableVertexAttribArray
glGetActiveAttrib
glGetActiveUniform
glGetAttachedShaders
glGetAttribLocation
glGetProgramInfoLog
glGetProgramiv
glGetShaderInfoLog
glGetShaderSource
glGetShaderiv
glGetUniformLocation
glGetUniformfv
glGetUniformiv
glGetVertexAttribPointerv
glGetVertexAttribdv
glGetVertexAttribfv
glGetVertexAttribiv
glIsProgram
glIsShader
glLinkProgram
glShaderSource
glStencilFuncSeparate
glStencilMaskSeparate
glStencilOpSeparate
glUniform1f
glUniform1fv
glUniform1i
glUniform1iv
glUniform2f
glUniform2fv
glUniform2i
glUniform2iv
glUniform3f
glUniform3fv
glUniform3i
glUniform3iv
glUniform4f
glUniform4fv
glUniform4i
glUniform4iv
glUniformMatrix2fv
glUniformMatrix3fv
glUniformMatrix4fv
glUseProgram
glValidateProgram
glVertexAttrib1d
glVertexAttrib1dv
glVertexAttrib1f
glVertexAttrib1fv
glVertexAttrib1s
glVertexAttrib1sv
glVertexAttrib2d
glVertexAttrib2dv
glVertexAttrib2f
glVertexAttrib2fv
glVertexAttrib2s
glVertexAttrib2sv
glVertexAttrib3d
glVertexAttrib3dv
glVertexAttrib3f
glVertexAttrib3fv
glVertexAttrib3s
glVertexAttrib3sv
glVertexAttrib4Nbv
glVertexAttrib4Niv
glVertexAttrib4Nsv
glVertexAttrib4Nub
glVertexAttrib4Nubv
glVertexAttrib4Nuiv
glVertexAttrib4Nusv
glVertexAttrib4bv
glVertexAttrib4d
glVertexAttrib4dv
glVertexAttrib4f
glVertexAttrib4fv
glVertexAttrib4iv
glVertexAttrib4s
glVertexAttrib4sv
glVertexAttrib4ubv
glVertexAttrib4uiv
glVertexAttrib4usv
glVertexAttribPointer
; GL 2.1
glUniformMatrix2x3fv
glUniformMatrix2x4fv
glUniformMatrix3x2fv
glUniformMatrix3x4fv
glUniformMatrix4x2fv
glUniformMatrix4x3fv
; GL 3.0
glBeginConditionalRender
glBeginTransformFeedback
glBindBufferBase
glBindBufferRange
glBindFragDataLocation
glBindFramebuffer
glBindRenderbuffer
glBindVertexArray
glBlitFramebuffer
glCheckFramebufferStatus
glClampColor
glClearBufferfi
glClearBufferfv
glClearBufferiv
glClearBufferuiv
glColorMaski
glDeleteFramebuffers
glDeleteRenderbuffers
glDeleteVertexArrays
glDisablei
glEnablei
glEndConditionalRender
glEndTransformFeedback
glFlushMappedBufferRange
glFramebufferRenderbuffer
glFramebufferTexture1D
glFramebufferTexture2D
glFramebufferTexture3D
glFramebufferTextureLayer
glGenFramebuffers
glGenRenderbuffers
glGenVertexArrays
glGenerateMipmap
glGetBooleani_v
glGetFragDataLocation
glGetFramebufferAttachmentParameteriv
glGetIntegeri_v
glGetRenderbufferParameteriv
glGetStringi
glGetTexParameterIiv
glGetTexParameterIuiv
glGetTransformFeedbackVarying
glGetUniformuiv
glGetVertexAttribIiv
glGetVertexAttribIuiv
glIsEnabledi
glIsFramebuffer
glIsRenderbuffer
glIsVertexArray
glMapBufferRange
glRenderbufferStorage
glRenderbufferStorageMultisample
glTexParameterIiv
glTexParameterIuiv
glTransformFeedbackVaryings
glUniform1ui
glUniform1uiv
glUniform2ui
glUniform2uiv
glUniform3ui
glUniform3uiv
glUniform4ui
glUniform4uiv
glVertexAttribI1i
glVertexAttribI1iv
glVertexAttribI1ui
glVertexAttribI1uiv
glVertexAttribI2i
glVertexAttribI2iv
glVertexAttribI2ui
glVertexAttribI2uiv
glVertexAttribI3i
glVertexAttribI3iv
glVertexAttribI3ui
glVertexAttribI3uiv
glVertexAttribI4bv
glVertexAttribI4i
glVertexAttribI4iv
glVertexAttribI4sv
glVertexAttribI4ubv
glVertexAttribI4ui
glVertexAttribI4uiv
glVertexAttribI4usv
glVertexAttribIPointer
; GL 3.1
glCopyBufferSubData
glDrawArraysInstanced
glDrawElementsInstanced
glGetActiveUniformBlockName
glGetActiveUniformBlockiv
glGetActiveUniformName
glGetActiveUniformsiv
glGetUniformBlockIndex
glGetUniformIndices
glPrimitiveRestartIndex
glTexBuffer
glUniformBlockBinding
; WGL 1.0
wglChoosePixelFormat
wglCopyContext
wglCreateContext
wglCreateLayerContext
wglDeleteContext
wglDescribeLayerPlane
wglDescribePixelFormat
wglGetCurrentContext
wglGetCurrentDC
wglGetEnhMetaFilePixelFormat
wglGetLayerPaletteEntries
wglGetPixelFormat
wglGetProcAddress
wglMakeCurrent
wglRealizeLayerPalette
wglSetLayerPaletteEntries
wglSetPixelFormat
wglShareLists
wglSwapBuffers
wglSwapLayerBuffers
wglUseFontBitmapsA
wglUseFontBitmapsW
wglUseFontOutlinesA
wglUseFontOutlinesW
......@@ -103,7 +103,11 @@ BOOL GL_APIENTRY wglSetPixelFormat(HDC hdc, int ipfd, const PIXELFORMATDESCRIPTO
BOOL GL_APIENTRY wglSwapBuffers(HDC hdc)
{
UNIMPLEMENTED();
Thread *thread = egl::GetCurrentThread();
egl::Display *display = egl::Display::GetExistingDisplayFromNativeDisplay(hdc);
ANGLE_EGL_TRY_RETURN(thread, display->getWGLSurface()->swap(thread->getContext()),
"wglSwapBuffers", display->getWGLSurface(), FALSE);
return TRUE;
}
......@@ -117,76 +121,59 @@ HGLRC GL_APIENTRY wglCreateContext(HDC hDc)
{
Thread *thread = egl::GetCurrentThread();
GLenum platformType = EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE;
std::vector<EGLint> displayAttributes;
std::vector<EGLAttrib> displayAttributes;
displayAttributes.push_back(EGL_PLATFORM_ANGLE_TYPE_ANGLE);
GLenum platformType = EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE;
displayAttributes.push_back(platformType);
displayAttributes.push_back(EGL_PLATFORM_ANGLE_MAX_VERSION_MAJOR_ANGLE);
displayAttributes.push_back(EGL_DONT_CARE);
displayAttributes.push_back(EGL_PLATFORM_ANGLE_MAX_VERSION_MINOR_ANGLE);
displayAttributes.push_back(EGL_DONT_CARE);
displayAttributes.push_back(EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE);
displayAttributes.push_back(EGL_PLATFORM_ANGLE_DEVICE_TYPE_HARDWARE_ANGLE);
displayAttributes.push_back(EGL_NONE);
const auto &attribMapDisplay =
AttributeMap::CreateFromAttribArray((const EGLAttrib *)&displayAttributes[0]);
const auto &attribMapDisplay = AttributeMap::CreateFromAttribArray(displayAttributes.data());
EGLDisplay mDisplay = egl::Display::GetDisplayFromNativeDisplay(hDc, attribMapDisplay);
egl::Display *display = egl::Display::GetDisplayFromNativeDisplay(hDc, attribMapDisplay);
egl::Display *display = static_cast<egl::Display *>(mDisplay);
auto error = display->initialize();
ANGLE_EGL_TRY_RETURN(thread, display->initialize(), "wglCreateContext", display, nullptr);
// Don't have a thread to bind API to, so just use this API
// eglBindAPI(EGL_OPENGL_ES_API);
thread->setAPI(EGL_OPENGL_API);
// Default config
const EGLint configAttributes[] = {EGL_RED_SIZE,
EGL_DONT_CARE,
EGL_GREEN_SIZE,
EGL_DONT_CARE,
EGL_BLUE_SIZE,
EGL_DONT_CARE,
EGL_ALPHA_SIZE,
EGL_DONT_CARE,
EGL_DEPTH_SIZE,
EGL_DONT_CARE,
EGL_STENCIL_SIZE,
EGL_DONT_CARE,
EGL_SAMPLE_BUFFERS,
0,
EGL_NONE};
const EGLint configAttributes[] = {EGL_NONE};
// Choose config
EGLint configCount;
EGLConfig mConfig;
EGLConfig config;
AttributeMap attribMapConfig = AttributeMap::CreateFromIntArray(configAttributes);
ClipConfigs(display->chooseConfig(attribMapConfig), &mConfig, 1, &configCount);
ClipConfigs(display->chooseConfig(attribMapConfig), &config, 1, &configCount);
Config *configuration = static_cast<Config *>(config);
// Initialize surface
std::vector<EGLint> surfaceAttributes;
surfaceAttributes.push_back(EGL_NONE);
surfaceAttributes.push_back(EGL_NONE);
AttributeMap surfAttributes = AttributeMap::CreateFromIntArray(&surfaceAttributes[0]);
// Create first window surface
// EGLSurface mWindowSurface = eglCreateWindowSurface(mDisplay, mConfig,
// (EGLNativeWindowType)hDc, &surfaceAttributes[0]);
egl::Surface *surface = nullptr;
ANGLE_EGL_TRY_RETURN(
thread,
display->createWindowSurface(configuration, WindowFromDC(hDc), surfAttributes, &surface),
"wglCreateContext", display, nullptr);
// Initialize context
EGLint contextAttibutes[] = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE};
EGLint contextAttibutes[] = {EGL_CONTEXT_CLIENT_VERSION, 3, EGL_CONTEXT_MINOR_VERSION, 3,
EGL_NONE};
Config *configuration = static_cast<Config *>(mConfig);
gl::Context *sharedGLContext = static_cast<gl::Context *>(nullptr);
AttributeMap attributes = AttributeMap::CreateFromIntArray(contextAttibutes);
AttributeMap ctxAttributes = AttributeMap::CreateFromIntArray(contextAttibutes);
gl::Context *context = nullptr;
auto error1 = display->createContext(configuration, sharedGLContext, thread->getAPI(),
attributes, &context);
EGLContext mContext = static_cast<EGLContext>(context);
ANGLE_EGL_TRY_RETURN(thread,
display->createContext(configuration, sharedGLContext, EGL_OPENGL_API,
ctxAttributes, &context),
"wglCreateContext", display, nullptr);
return (HGLRC)mContext;
return reinterpret_cast<HGLRC>(context);
}
HGLRC GL_APIENTRY wglCreateLayerContext(HDC hDc, int level)
......@@ -251,8 +238,19 @@ PROC GL_APIENTRY wglGetProcAddress(LPCSTR lpszProc)
BOOL GL_APIENTRY wglMakeCurrent(HDC hDc, HGLRC newContext)
{
UNIMPLEMENTED();
return FALSE;
Thread *thread = egl::GetCurrentThread();
egl::Display *display = egl::Display::GetExistingDisplayFromNativeDisplay(hDc);
gl::Context *context = reinterpret_cast<gl::Context *>(newContext);
ANGLE_EGL_TRY_RETURN(
thread,
display->makeCurrent(thread, display->getWGLSurface(), display->getWGLSurface(), context),
"wglMakeCurrent", display, FALSE);
SetContextCurrent(thread, context);
return TRUE;
}
BOOL GL_APIENTRY wglRealizeLayerPalette(HDC hdc, int iLayerPlane, BOOL bRealize)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment