Compiling MSOpenTech ANGLE project

ANGLE is a wrapper library that implements OpenGL ES API (version 2.0 and parts of 3.0) and translates OpenGL ES calls to their DirectX equivalents. See https://github.com/MSOpenTech/angle for more information.

There are two options how to use ANGLE: install its binaries as a NuGet package or compile it from the source code. I believe that cool software developers, like real heroes, never search easy ways, so I decided to compile ANGLE from the source code with VS2015 Community.

First I cloned the repository and ensured that my branch is ms-master:

ANGLE project in VS2015ANGLE project in VS2015

Then I successfully built solution angle\winrt\10\src\angle.sln (like a real hero of cause). The result of this feat were two DLLs in Debug_Win32 subfolder: libEGL.dll and libGLESv2.dll and the following libraries in Debug_Win32/lib: angle_common.lib  libANGLE.lib  libEGL.exp  libEGL.lib  libGLESv2.exp  libGLESv2.lib  preprocessor.lib  translator.lib  translator_lib.lib  translator_static.lib.

The most of the samples in angle\samples\samples.sln solution also built fine. Typical sample application includes the following headers:

#include <EGL/egl.h>
#include <EGL/eglext.h>

and use some CreateOSWindow() function from angle\util\OSWindow.h for creating a top-level window that hosts the OpenGL surface. It can be Win32Window, WinRTWindow, OSXWindow or X11Window.

Below I provided screenshots of some sample applications.

multi_window sample

multi_window sample

it creates five top-level windows with the following code:

const size_t numWindows = 5;
for (size_t i = 1; i < numWindows; i++)
{
    window window;

    window.osWindow = CreateOSWindow();
    if (!window.osWindow->initialize("MultiWindow", 256, 256))
    {
        return false;
    }

    window.surface = eglCreateWindowSurface(getDisplay(), getConfig(), window.osWindow->getNativeWindow(), nullptr);
    if (window.surface == EGL_NO_SURFACE)
    {
        return false;
    }

    window.osWindow->setVisible(true);

    mWindows.push_back(window);
}

and uses some interesting construct for embedding the shader source code into C++:

const std::string vs = SHADER_SOURCE
(
    attribute vec4 vPosition;
    void main()
    {
        gl_Position = vPosition;
    }
);

multiple_draw_buffers sample

multiple_draw_buffers sample

multi_texture sample

multi_texture sample

1 Response to Compiling MSOpenTech ANGLE project

  1. superadmin on December 25, 2015 at 1:10 AM:

    Looks like ANGLE does not support antialiasing at the moment. At least this http://stackoverflow.com/questions/8338696/how-to-draw-anti-aliased-lines-in-opengl-es-2-0 does not work with ANGLE. eglChooseConfig() function fails with EGL_SAMPLE_BUFFERS = 1 all the time. Search “sampleBuffers” in ANGLE source code shows “FIXME: enumerate multi-sampling” etc., so looks like it is not implemented yet. Finally there is the following function in the ANGLE sources:

    GLsizei SurfaceRenderTarget11::getSamples() const
    {
    // Our EGL surfaces do not support multisampling.
    return 0;
    }

Leave a Reply

Your email address will not be published. Required fields are marked *