Пример #1
0
        protected override void Initialize()
        {
            string vertShader =
                @"attribute vec3 vertPosition;
attribute vec3 vertColor;

varying vec3 fragColor;

void main()
{
    gl_Position = vec4(vertPosition, 1.0);
    fragColor = vertColor;
}";

            string fragShader =
                @"precision mediump float;

varying vec3 fragColor;

void main()
{
    gl_FragColor = vec4(fragColor, 1.0);
}";

            uint vertexShader   = GLUtils.CompileShader(vertShader, GL_VERTEX_SHADER);
            uint fragmentShader = GLUtils.CompileShader(fragShader, GL_FRAGMENT_SHADER);

            _program = glCreateProgram();
            if (_program == 0)
            {
                throw new InvalidOperationException("Failed to create program.");
            }

            glAttachShader(_program, vertexShader);
            glAttachShader(_program, fragmentShader);

            glBindAttribLocation(_program, 0, "vertPosition");
            glBindAttribLocation(_program, 1, "vertColor");
            GLUtils.LinkProgram(_program);

            glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

            glEnableVertexAttribArray(0);
            glEnableVertexAttribArray(1);
        }
Пример #2
0
        protected override void Initialize()
        {
            string vertShader =
                @"attribute vec3 vertPosition;
attribute vec3 vertColor;
attribute vec2 vertTexCoord;

varying vec3 fragColor;
varying vec2 fragTexCoord;

void main()
{
    gl_Position = vec4(vertPosition, 1.0);
    fragColor = vertColor;
    fragTexCoord = vertTexCoord;
}";

            string fragShader =
                @"precision mediump float;

varying vec3 fragColor;
varying vec2 fragTexCoord;

uniform sampler2D fragTexture;

void main()
{
    gl_FragColor = texture2D(fragTexture, fragTexCoord);
}";

            string screenFragShader =
                @"precision mediump float;

varying vec3 fragColor;
varying vec2 fragTexCoord;

uniform sampler2D fragTexture;
uniform float fragTime;

void main()
{
	gl_FragColor = texture2D(fragTexture, fragTexCoord + 0.005 * vec2(sin(fragTime + 1024.0 * fragTexCoord.x), cos(fragTime + 768.0 * fragTexCoord.y)));
}";

            uint vertexShader         = GLUtils.CompileShader(vertShader, GL_VERTEX_SHADER);
            uint fragmentShader       = GLUtils.CompileShader(fragShader, GL_FRAGMENT_SHADER);
            uint screenFragmentShader = GLUtils.CompileShader(screenFragShader, GL_FRAGMENT_SHADER);

            _program = glCreateProgram();
            if (_program == 0)
            {
                throw new InvalidOperationException("Failed to create program.");
            }

            glAttachShader(_program, vertexShader);
            glAttachShader(_program, fragmentShader);

            glBindAttribLocation(_program, 0, "vertPosition");
            glBindAttribLocation(_program, 1, "vertColor");
            glBindAttribLocation(_program, 2, "vertTexCoord");
            GLUtils.LinkProgram(_program);

            _fragTextureLocation = glGetUniformLocation(_program, "fragTexture");

            _screenProgram = glCreateProgram();
            if (_screenProgram == 0)
            {
                throw new InvalidOperationException("Failed to create program.");
            }

            glAttachShader(_screenProgram, vertexShader);
            glAttachShader(_screenProgram, screenFragmentShader);

            glBindAttribLocation(_screenProgram, 0, "vertPosition");
            glBindAttribLocation(_screenProgram, 1, "vertColor");
            glBindAttribLocation(_screenProgram, 2, "vertTexCoord");
            GLUtils.LinkProgram(_screenProgram);

            _screenFragTextureLocation = glGetUniformLocation(_screenProgram, "fragTexture");
            _screenFragTimeLocation    = glGetUniformLocation(_screenProgram, "fragTime");

            glGenTextures(1, out _texture);

            glActiveTexture(GL_TEXTURE0);
            glBindTexture(GL_TEXTURE_2D, _texture);

            // Image is an RGBImage.
            var image = Image.LoadTga("Box.tga").To <Rgb24>();

            using (var data = image.GetDataPointer())
            {
                glTexImage2D(GL_TEXTURE_2D, 0, (int)GL_RGB, image.Width, image.Height, 0, GL_RGB, GL_UNSIGNED_BYTE, data.Pointer);
            }

            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (int)GL_LINEAR);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, (int)GL_LINEAR);

            glGenFramebuffers(1, out _framebuffer);

            glBindFramebuffer(GL_FRAMEBUFFER, _framebuffer);

            glGenTextures(1, out _framebufferTexture);

            glActiveTexture(GL_TEXTURE0);
            glBindTexture(GL_TEXTURE_2D, _framebufferTexture);
            glTexImage2D(GL_TEXTURE_2D, 0, (int)GL_RGBA, 1024, 768, 0, GL_RGBA, GL_UNSIGNED_BYTE, IntPtr.Zero);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, (int)GL_NEAREST);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (int)GL_NEAREST);
            glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, _framebufferTexture, 0);

            uint framebufferStatus = glCheckFramebufferStatus(GL_FRAMEBUFFER);

            if (framebufferStatus != GL_FRAMEBUFFER_COMPLETE)
            {
                throw new InvalidOperationException($"Framebuffer Incomplete: 0x{framebufferStatus:X}");
            }

            glBindFramebuffer(GL_FRAMEBUFFER, 0);

            glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

            glEnableVertexAttribArray(0);
            glEnableVertexAttribArray(1);
            glEnableVertexAttribArray(2);
        }
Пример #3
0
        protected override void Initialize()
        {
            string vertShader =
                @"attribute vec3 vertPosition;
attribute vec2 vertTexCoord;

varying vec2 fragTexCoord;

uniform mat4 vertTransform; 

void main()
{
    gl_Position = vertTransform * vec4(vertPosition, 1.0);
    fragTexCoord = vertTexCoord;
}";

            string fragShader =
                @"precision mediump float;

varying vec3 fragColor;
varying vec2 fragTexCoord;

uniform sampler2D fragTexture;

void main()
{
    gl_FragColor = texture2D(fragTexture, fragTexCoord);
}";

            uint vertexShader   = GLUtils.CompileShader(vertShader, GL_VERTEX_SHADER);
            uint fragmentShader = GLUtils.CompileShader(fragShader, GL_FRAGMENT_SHADER);

            _program = glCreateProgram();
            if (_program == 0)
            {
                throw new InvalidOperationException("Failed to create program.");
            }

            glAttachShader(_program, vertexShader);
            glAttachShader(_program, fragmentShader);

            glBindAttribLocation(_program, 0, "vertPosition");
            glBindAttribLocation(_program, 1, "vertTexCoord");
            GLUtils.LinkProgram(_program);

            _vertTransformLocation = glGetUniformLocation(_program, "vertTransform");
            _fragTextureLocation   = glGetUniformLocation(_program, "fragTexture");

            uint[] textures = new uint[2];
            glGenTextures(2, out textures[0]);

            _backgroundTexture = textures[0];
            _fireTexture       = textures[1];

            glActiveTexture(GL_TEXTURE0);
            glBindTexture(GL_TEXTURE_2D, _backgroundTexture);

            var image = Image.LoadPng("opengles.png").To <Rgba32>();

            _backgroundWidth  = image.Width;
            _backgroundHeight = image.Height;
            using (var data = image.GetDataPointer())
            {
                glTexImage2D(GL_TEXTURE_2D, 0, (int)GL_RGBA, image.Width, image.Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data.Pointer);
            }

            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (int)GL_LINEAR);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, (int)GL_LINEAR);

            glBindTexture(GL_TEXTURE_2D, _fireTexture);
            glTexImage2D(GL_TEXTURE_2D, 0, (int)GL_RGBA, _fireWidth - _firePadding, _fireHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, IntPtr.Zero);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (int)GL_LINEAR);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, (int)GL_LINEAR);

            glEnable(GL_BLEND);
            glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO);
            glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

            glEnableVertexAttribArray(0);
            glEnableVertexAttribArray(1);

            // Initialize the bottom row of pixels with the last color.
            for (int x = 0; x < _fireWidth; x++)
            {
                SetFirePixel(x, _fireHeight - 1, _fireColors.Length - 1);
            }
        }
Пример #4
0
        protected override void Initialize()
        {
            string vertShader =
                @"attribute vec3 vertPosition;
attribute vec3 vertColor;
attribute vec2 vertTexCoord;

varying vec3 fragColor;
varying vec2 fragTexCoord;

void main()
{
    gl_Position = vec4(vertPosition, 1.0);
    fragColor = vertColor;
    fragTexCoord = vertTexCoord;
}";

            string fragShader =
                @"precision mediump float;

varying vec3 fragColor;
varying vec2 fragTexCoord;

uniform sampler2D fragTexture;

void main()
{
    gl_FragColor = texture2D(fragTexture, fragTexCoord);
}";

            uint vertexShader   = GLUtils.CompileShader(vertShader, GL_VERTEX_SHADER);
            uint fragmentShader = GLUtils.CompileShader(fragShader, GL_FRAGMENT_SHADER);

            _program = glCreateProgram();
            if (_program == 0)
            {
                throw new InvalidOperationException("Failed to create program.");
            }

            glAttachShader(_program, vertexShader);
            glAttachShader(_program, fragmentShader);

            glBindAttribLocation(_program, 0, "vertPosition");
            glBindAttribLocation(_program, 1, "vertColor");
            glBindAttribLocation(_program, 2, "vertTexCoord");
            GLUtils.LinkProgram(_program);

            _fragTextureLocation = glGetUniformLocation(_program, "fragTexture");

            uint texture;

            glGenTextures(1, &texture);
            _texture = texture;

            glActiveTexture(GL_TEXTURE0);
            glBindTexture(GL_TEXTURE_2D, _texture);

            // Image is an RGBImage.
            var image = Image.LoadTga("Box.tga").To <Rgb24>();

            using (var data = image.GetDataPointer())
            {
                glTexImage2D(GL_TEXTURE_2D, 0, (int)GL_RGB, image.Width, image.Height, 0, GL_RGB, GL_UNSIGNED_BYTE, (void *)data.Pointer);
            }

            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (int)GL_LINEAR);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, (int)GL_LINEAR);

            glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

            glEnableVertexAttribArray(0);
            glEnableVertexAttribArray(1);
            glEnableVertexAttribArray(2);
        }
Пример #5
0
        protected override void Initialize()
        {
            string vertShader =
                @"attribute vec2 vertPosition;
attribute vec2 vertTexCoord;
attribute vec4 vertColor;

varying vec2 fragTexCoord;
varying vec4 fragColor;

uniform mat4 vertProjection; 

void main()
{
    gl_Position = vertProjection * vec4(vertPosition.xy, 0, 1);
    fragTexCoord = vertTexCoord;
    fragColor = vertColor;
}";

            string fragShader =
                @"precision mediump float;

varying vec2 fragTexCoord;
varying vec4 fragColor;

uniform sampler2D fragTexture;

void main()
{
    gl_FragColor = fragColor * texture2D(fragTexture, fragTexCoord);
}";

            uint vertexShader   = GLUtils.CompileShader(vertShader, GL_VERTEX_SHADER);
            uint fragmentShader = GLUtils.CompileShader(fragShader, GL_FRAGMENT_SHADER);

            _program = glCreateProgram();
            if (_program == 0)
            {
                throw new InvalidOperationException("Failed to create program.");
            }

            glAttachShader(_program, vertexShader);
            glAttachShader(_program, fragmentShader);

            glBindAttribLocation(_program, 0, "vertPosition");
            glBindAttribLocation(_program, 1, "vertTexCoord");
            glBindAttribLocation(_program, 2, "vertColor");
            GLUtils.LinkProgram(_program);

            _vertProjectionLocation = glGetUniformLocation(_program, "vertProjection");
            _fragTextureLocation    = glGetUniformLocation(_program, "fragTexture");

            glGenTextures(1, out _texture);

            glActiveTexture(GL_TEXTURE0);
            glBindTexture(GL_TEXTURE_2D, _texture);

            var context = ImGui.CreateContext();

            ImGui.SetCurrentContext(context);
            ImGui.StyleColorsDark();
            var io = ImGui.GetIO();

            io.Fonts.AddFontDefault();

            io.Fonts.GetTexDataAsRGBA32(out byte *pixels, out int width, out int height, out int _);
            glTexImage2D(GL_TEXTURE_2D, 0, (int)GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels);

            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (int)GL_LINEAR);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, (int)GL_LINEAR);

            io.Fonts.SetTexID((IntPtr)_texture);
            io.Fonts.ClearTexData();

            SetKeyMap();

            glClearColor(1.0f, 0.0f, 1.0f, 1.0f);

            glEnableVertexAttribArray(0);
            glEnableVertexAttribArray(1);
            glEnableVertexAttribArray(2);

            glGenBuffers(1, out _vertexBuffer);
            glGenBuffers(1, out _indexBuffer);

            glEnable(GL_BLEND);
            glBlendEquation(GL_FUNC_ADD);
            glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
            glDisable(GL_CULL_FACE);
            glDisable(GL_DEPTH_TEST);
        }