| // Copyright (C) 2015 The Android Open Source Project |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glActiveTexture.xml","OpenGL ES 2.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glActiveTexture.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glActiveTexture.xhtml","OpenGL ES 3.1") |
| cmd void glActiveTexture(GLenum unit) { |
| minRequiredVersion(2, 0) |
| switch (unit) { |
| case GL_TEXTURE0, GL_TEXTURE1, GL_TEXTURE10, GL_TEXTURE11, GL_TEXTURE12, GL_TEXTURE13, |
| GL_TEXTURE14, GL_TEXTURE15, GL_TEXTURE16, GL_TEXTURE17, GL_TEXTURE18, GL_TEXTURE19, |
| GL_TEXTURE2, GL_TEXTURE20, GL_TEXTURE21, GL_TEXTURE22, GL_TEXTURE23, GL_TEXTURE24, |
| GL_TEXTURE25, GL_TEXTURE26, GL_TEXTURE27, GL_TEXTURE28, GL_TEXTURE29, GL_TEXTURE3, |
| GL_TEXTURE30, GL_TEXTURE31, GL_TEXTURE4, GL_TEXTURE5, GL_TEXTURE6, GL_TEXTURE7, |
| GL_TEXTURE8, GL_TEXTURE9: { |
| // version 2.0 |
| } |
| default: { |
| glErrorInvalidEnum(unit) |
| } |
| } |
| |
| ctx := GetContext() |
| ctx.ActiveTextureUnit = unit |
| if !(unit in ctx.TextureUnits) { |
| ctx.TextureUnits[unit] = ctx.TextureUnits[unit] |
| } |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glBindImageTexture.xhtml","OpenGL ES 3.1") |
| cmd void glBindImageTexture(GLuint unit, |
| TextureId texture, |
| GLint level, |
| GLboolean layered, |
| GLint layer, |
| GLenum access, |
| GLenum format) { |
| minRequiredVersion(3, 1) |
| switch (access) { |
| case GL_READ_ONLY, GL_READ_WRITE, GL_WRITE_ONLY: { |
| // version 3.1 |
| } |
| default: { |
| glErrorInvalidEnum(access) |
| } |
| } |
| switch (format) { |
| case GL_R32F, GL_R32I, GL_R32UI, GL_RGBA16F, GL_RGBA16I, GL_RGBA16UI, GL_RGBA32F, GL_RGBA32I, |
| GL_RGBA32UI, GL_RGBA8, GL_RGBA8I, GL_RGBA8UI, GL_RGBA8_SNORM: { |
| // version 3.1 |
| } |
| default: { |
| glErrorInvalidEnum(format) |
| } |
| } |
| // TODO |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glBindSampler.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glBindSampler.xhtml","OpenGL ES 3.1") |
| cmd void glBindSampler(GLuint unit, SamplerId sampler) { |
| minRequiredVersion(3, 0) |
| // TODO |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glBindTexture.xml","OpenGL ES 2.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glBindTexture.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glBindTexture.xhtml","OpenGL ES 3.1") |
| cmd void glBindTexture(GLenum target, TextureId texture) { |
| minRequiredVersion(2, 0) |
| switch (target) { |
| case GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP: { |
| // version 2.0 |
| } |
| case GL_TEXTURE_2D_ARRAY, GL_TEXTURE_3D: { |
| minRequiredVersion(3, 0) |
| } |
| case GL_TEXTURE_2D_MULTISAMPLE: { |
| minRequiredVersion(3, 1) |
| } |
| default: { |
| glErrorInvalidEnum(target) |
| } |
| } |
| |
| ctx := GetContext() |
| if !(texture in ctx.Instances.Textures) { |
| ctx.Instances.Textures[texture] = new!Texture() |
| } |
| ctx.TextureUnits[ctx.ActiveTextureUnit][target] = texture |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glCompressedTexImage2D.xml","OpenGL ES 2.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glCompressedTexImage2D.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glCompressedTexImage2D.xhtml","OpenGL ES 3.1") |
| cmd void glCompressedTexImage2D(GLenum target, |
| GLint level, |
| GLenum format, |
| GLsizei width, |
| GLsizei height, |
| GLint border, |
| GLsizei image_size, |
| TexturePointer data) { |
| minRequiredVersion(2, 0) |
| switch (target) { |
| case GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, |
| GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, GL_TEXTURE_CUBE_MAP_POSITIVE_X, |
| GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z: { |
| // version 2.0 |
| } |
| default: { |
| glErrorInvalidEnum(target) |
| } |
| } |
| switch (format) { |
| case GL_COMPRESSED_R11_EAC, GL_COMPRESSED_RG11_EAC, GL_COMPRESSED_RGB8_ETC2, |
| GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, GL_COMPRESSED_RGBA8_ETC2_EAC, |
| GL_COMPRESSED_SIGNED_R11_EAC, GL_COMPRESSED_SIGNED_RG11_EAC, |
| GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, GL_COMPRESSED_SRGB8_ETC2, |
| GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: { |
| minRequiredVersion(3, 0) |
| } |
| case GL_ATC_RGB_AMD, GL_ATC_RGBA_EXPLICIT_ALPHA_AMD, GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD: { |
| requiresExtension(GL_AMD_compressed_ATC_texture) |
| // TODO: Add to other commands as well. |
| } |
| default: { |
| glErrorInvalidEnum(format) |
| } |
| } |
| |
| assert(border == 0) |
| ctx := GetContext() |
| switch (target) { |
| case GL_TEXTURE_2D: { |
| id := ctx.TextureUnits[ctx.ActiveTextureUnit][GL_TEXTURE_2D] |
| t := ctx.Instances.Textures[id] |
| l := Image( |
| Width: width, |
| Height: height, |
| Size: as!u32(image_size), |
| Format: as!GLenum(format) /* TODO: Implicit cast? */, |
| ) |
| if (ctx.BoundBuffers[GL_PIXEL_UNPACK_BUFFER] == 0) && (data != null) { |
| l.Data = clone(as!u8*(data)[0:l.Size]) |
| } |
| t.Texture2D[level] = l |
| t.Kind = TEXTURE2D // TODO: Warning/Error if kind has changed? |
| // TODO: Warning/Error if format has changed |
| t.Format = as!GLenum(format) // TODO: Implicit cast? |
| } |
| case GL_TEXTURE_CUBE_MAP_POSITIVE_X, GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z, |
| GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: { |
| id := ctx.TextureUnits[ctx.ActiveTextureUnit][GL_TEXTURE_CUBE_MAP] |
| t := ctx.Instances.Textures[id] |
| l := Image( |
| Width: width, |
| Height: height, |
| Size: as!u32(image_size), |
| Format: as!GLenum(format) /* TODO: Implicit cast? */, |
| ) |
| if (ctx.BoundBuffers[GL_PIXEL_UNPACK_BUFFER] == 0) && (data != null) { |
| l.Data = clone(as!u8*(data)[0:l.Size]) |
| } |
| cube := t.Cubemap[level] |
| cube.Faces[as!GLenum(target)] = l |
| t.Cubemap[level] = cube |
| t.Kind = CUBEMAP // TODO: Warning/Error if kind has changed? |
| // TODO: Warning/Error if format has changed |
| t.Format = as!GLenum(format) // TODO: Implicit cast? |
| } |
| } |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glCompressedTexImage3D.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glCompressedTexImage3D.xhtml","OpenGL ES 3.1") |
| cmd void glCompressedTexImage3D(GLenum target, |
| GLint level, |
| GLenum internalformat, |
| GLsizei width, |
| GLsizei height, |
| GLsizei depth, |
| GLint border, |
| GLsizei imageSize, |
| const void* data) { |
| minRequiredVersion(3, 0) |
| switch (target) { |
| case GL_TEXTURE_2D_ARRAY, GL_TEXTURE_3D: { |
| // version 3.0 |
| } |
| default: { |
| glErrorInvalidEnum(target) |
| } |
| } |
| switch (internalformat) { |
| case GL_COMPRESSED_R11_EAC, GL_COMPRESSED_RG11_EAC, GL_COMPRESSED_RGB8_ETC2, |
| GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, GL_COMPRESSED_RGBA8_ETC2_EAC, |
| GL_COMPRESSED_SIGNED_R11_EAC, GL_COMPRESSED_SIGNED_RG11_EAC, |
| GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, GL_COMPRESSED_SRGB8_ETC2, |
| GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: { |
| // version 3.0 |
| } |
| default: { |
| glErrorInvalidEnum(internalformat) |
| } |
| } |
| // TODO |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glCompressedTexSubImage2D.xml","OpenGL ES 2.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glCompressedTexSubImage2D.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glCompressedTexSubImage2D.xhtml","OpenGL ES 3.1") |
| cmd void glCompressedTexSubImage2D(GLenum target, |
| GLint level, |
| GLint xoffset, |
| GLint yoffset, |
| GLsizei width, |
| GLsizei height, |
| GLenum format, |
| GLsizei image_size, |
| TexturePointer data) { |
| minRequiredVersion(2, 0) |
| switch (target) { |
| case GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, |
| GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, GL_TEXTURE_CUBE_MAP_POSITIVE_X, |
| GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z: { |
| // version 2.0 |
| } |
| default: { |
| glErrorInvalidEnum(target) |
| } |
| } |
| switch (format) { |
| case GL_COMPRESSED_R11_EAC, GL_COMPRESSED_RG11_EAC, GL_COMPRESSED_RGB8_ETC2, |
| GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, GL_COMPRESSED_RGBA8_ETC2_EAC, |
| GL_COMPRESSED_SIGNED_R11_EAC, GL_COMPRESSED_SIGNED_RG11_EAC, |
| GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, GL_COMPRESSED_SRGB8_ETC2, |
| GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: { |
| minRequiredVersion(3, 0) |
| } |
| default: { |
| glErrorInvalidEnum(format) |
| } |
| } |
| |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glCompressedTexSubImage3D.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glCompressedTexSubImage3D.xhtml","OpenGL ES 3.1") |
| cmd void glCompressedTexSubImage3D(GLenum target, |
| GLint level, |
| GLint xoffset, |
| GLint yoffset, |
| GLint zoffset, |
| GLsizei width, |
| GLsizei height, |
| GLsizei depth, |
| GLenum format, |
| GLsizei imageSize, |
| const void* data) { |
| minRequiredVersion(3, 0) |
| switch (target) { |
| case GL_TEXTURE_2D_ARRAY, GL_TEXTURE_3D: { |
| // version 3.0 |
| } |
| default: { |
| glErrorInvalidEnum(target) |
| } |
| } |
| switch (format) { |
| case GL_COMPRESSED_R11_EAC, GL_COMPRESSED_RG11_EAC, GL_COMPRESSED_RGB8_ETC2, |
| GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, GL_COMPRESSED_RGBA8_ETC2_EAC, |
| GL_COMPRESSED_SIGNED_R11_EAC, GL_COMPRESSED_SIGNED_RG11_EAC, |
| GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, GL_COMPRESSED_SRGB8_ETC2, |
| GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: { |
| // version 3.0 |
| } |
| default: { |
| glErrorInvalidEnum(format) |
| } |
| } |
| // TODO |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glCopyTexImage2D.xml","OpenGL ES 2.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glCopyTexImage2D.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glCopyTexImage2D.xhtml","OpenGL ES 3.1") |
| cmd void glCopyTexImage2D(GLenum target, |
| GLint level, |
| GLenum format, |
| GLint x, |
| GLint y, |
| GLsizei width, |
| GLsizei height, |
| GLint border) { |
| minRequiredVersion(2, 0) |
| switch (target) { |
| case GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, |
| GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, GL_TEXTURE_CUBE_MAP_POSITIVE_X, |
| GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z: { |
| // version 2.0 |
| } |
| default: { |
| glErrorInvalidEnum(target) |
| } |
| } |
| switch (format) { |
| case GL_ALPHA, GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_RGB, GL_RGBA: { |
| // version 2.0 |
| } |
| case GL_R16I, GL_R16UI, GL_R32I, GL_R32UI, GL_R8, GL_R8I, GL_R8UI, GL_RG16I, GL_RG16UI, |
| GL_RG32I, GL_RG32UI, GL_RG8, GL_RG8I, GL_RG8UI, GL_RGB10_A2, GL_RGB10_A2UI, GL_RGB565, |
| GL_RGB5_A1, GL_RGB8, GL_RGBA16I, GL_RGBA16UI, GL_RGBA32I, GL_RGBA32UI, GL_RGBA4, GL_RGBA8, |
| GL_RGBA8I, GL_RGBA8UI, GL_SRGB8, GL_SRGB8_ALPHA8: { |
| minRequiredVersion(3, 0) |
| } |
| default: { |
| glErrorInvalidEnum(format) |
| } |
| } |
| |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glCopyTexSubImage2D.xml","OpenGL ES 2.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glCopyTexSubImage2D.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glCopyTexSubImage2D.xhtml","OpenGL ES 3.1") |
| cmd void glCopyTexSubImage2D(GLenum target, |
| GLint level, |
| GLint xoffset, |
| GLint yoffset, |
| GLint x, |
| GLint y, |
| GLsizei width, |
| GLsizei height) { |
| minRequiredVersion(2, 0) |
| switch (target) { |
| case GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, |
| GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, GL_TEXTURE_CUBE_MAP_POSITIVE_X, |
| GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z: { |
| // version 2.0 |
| } |
| default: { |
| glErrorInvalidEnum(target) |
| } |
| } |
| |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glCopyTexSubImage3D.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glCopyTexSubImage3D.xhtml","OpenGL ES 3.1") |
| cmd void glCopyTexSubImage3D(GLenum target, |
| GLint level, |
| GLint xoffset, |
| GLint yoffset, |
| GLint zoffset, |
| GLint x, |
| GLint y, |
| GLsizei width, |
| GLsizei height) { |
| minRequiredVersion(3, 0) |
| switch (target) { |
| case GL_TEXTURE_2D_ARRAY, GL_TEXTURE_3D: { |
| // version 3.0 |
| } |
| default: { |
| glErrorInvalidEnum(target) |
| } |
| } |
| // TODO |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glDeleteSamplers.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glDeleteSamplers.xhtml","OpenGL ES 3.1") |
| cmd void glDeleteSamplers(GLsizei count, const SamplerId* samplers) { |
| minRequiredVersion(3, 0) |
| // TODO |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glDeleteTextures.xml","OpenGL ES 2.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glDeleteTextures.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glDeleteTextures.xhtml","OpenGL ES 3.1") |
| cmd void glDeleteTextures(GLsizei count, const TextureId* textures) { |
| minRequiredVersion(2, 0) |
| |
| t := textures[0:count] |
| ctx := GetContext() |
| for i in (0 .. count) { |
| ctx.Instances.Textures[t[i]] = null |
| } |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGenSamplers.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGenSamplers.xhtml","OpenGL ES 3.1") |
| cmd void glGenSamplers(GLsizei count, SamplerId* samplers) { |
| minRequiredVersion(3, 0) |
| // TODO |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGenTextures.xml","OpenGL ES 2.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGenTextures.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGenTextures.xhtml","OpenGL ES 3.1") |
| cmd void glGenTextures(GLsizei count, TextureId* textures) { |
| minRequiredVersion(2, 0) |
| |
| t := textures[0:count] |
| ctx := GetContext() |
| for i in (0 .. count) { |
| id := as!TextureId(?) |
| ctx.Instances.Textures[id] = new!Texture() |
| t[i] = id |
| } |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGenerateMipmap.xml","OpenGL ES 2.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGenerateMipmap.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGenerateMipmap.xhtml","OpenGL ES 3.1") |
| cmd void glGenerateMipmap(GLenum target) { |
| minRequiredVersion(2, 0) |
| switch (target) { |
| case GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP: { |
| // version 2.0 |
| } |
| case GL_TEXTURE_2D_ARRAY, GL_TEXTURE_3D: { |
| minRequiredVersion(3, 0) |
| } |
| default: { |
| glErrorInvalidEnum(target) |
| } |
| } |
| |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetSamplerParameter.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetSamplerParameter.xhtml","OpenGL ES 3.1") |
| cmd void glGetSamplerParameterfv(SamplerId sampler, GLenum pname, GLfloat* params) { |
| minRequiredVersion(3, 0) |
| switch (pname) { |
| case GL_TEXTURE_COMPARE_FUNC, GL_TEXTURE_COMPARE_MODE, GL_TEXTURE_MAG_FILTER, |
| GL_TEXTURE_MAX_LOD, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MIN_LOD, GL_TEXTURE_WRAP_R, |
| GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T: { |
| // version 3.0 |
| } |
| default: { |
| glErrorInvalidEnum(pname) |
| } |
| } |
| // TODO |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetSamplerParameter.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetSamplerParameter.xhtml","OpenGL ES 3.1") |
| cmd void glGetSamplerParameteriv(SamplerId sampler, GLenum pname, GLint* params) { |
| minRequiredVersion(3, 0) |
| switch (pname) { |
| case GL_TEXTURE_COMPARE_FUNC, GL_TEXTURE_COMPARE_MODE, GL_TEXTURE_MAG_FILTER, |
| GL_TEXTURE_MAX_LOD, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MIN_LOD, GL_TEXTURE_WRAP_R, |
| GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T: { |
| // version 3.0 |
| } |
| default: { |
| glErrorInvalidEnum(pname) |
| } |
| } |
| // TODO |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetTexLevelParameter.xhtml","OpenGL ES 3.1") |
| cmd void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat* params) { |
| minRequiredVersion(3, 1) |
| switch (target) { |
| case GL_TEXTURE_2D, GL_TEXTURE_2D_ARRAY, GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_3D, |
| GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, |
| GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, GL_TEXTURE_CUBE_MAP_POSITIVE_X, |
| GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z: { |
| // version 3.1 |
| } |
| default: { |
| glErrorInvalidEnum(target) |
| } |
| } |
| switch (pname) { |
| case GL_TEXTURE_ALPHA_SIZE, GL_TEXTURE_ALPHA_TYPE, GL_TEXTURE_BLUE_SIZE, GL_TEXTURE_BLUE_TYPE, |
| GL_TEXTURE_COMPRESSED, GL_TEXTURE_DEPTH, GL_TEXTURE_DEPTH_SIZE, GL_TEXTURE_DEPTH_TYPE, |
| GL_TEXTURE_FIXED_SAMPLE_LOCATIONS, GL_TEXTURE_GREEN_SIZE, GL_TEXTURE_GREEN_TYPE, |
| GL_TEXTURE_HEIGHT, GL_TEXTURE_INTERNAL_FORMAT, GL_TEXTURE_RED_SIZE, GL_TEXTURE_RED_TYPE, |
| GL_TEXTURE_SAMPLES, GL_TEXTURE_SHARED_SIZE, GL_TEXTURE_STENCIL_SIZE, GL_TEXTURE_WIDTH: { |
| // version 3.1 |
| } |
| default: { |
| glErrorInvalidEnum(pname) |
| } |
| } |
| // TODO |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetTexLevelParameter.xhtml","OpenGL ES 3.1") |
| cmd void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint* params) { |
| minRequiredVersion(3, 1) |
| switch (target) { |
| case GL_TEXTURE_2D, GL_TEXTURE_2D_ARRAY, GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_3D, |
| GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, |
| GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, GL_TEXTURE_CUBE_MAP_POSITIVE_X, |
| GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z: { |
| // version 3.1 |
| } |
| default: { |
| glErrorInvalidEnum(target) |
| } |
| } |
| switch (pname) { |
| case GL_TEXTURE_ALPHA_SIZE, GL_TEXTURE_ALPHA_TYPE, GL_TEXTURE_BLUE_SIZE, GL_TEXTURE_BLUE_TYPE, |
| GL_TEXTURE_COMPRESSED, GL_TEXTURE_DEPTH, GL_TEXTURE_DEPTH_SIZE, GL_TEXTURE_DEPTH_TYPE, |
| GL_TEXTURE_FIXED_SAMPLE_LOCATIONS, GL_TEXTURE_GREEN_SIZE, GL_TEXTURE_GREEN_TYPE, |
| GL_TEXTURE_HEIGHT, GL_TEXTURE_INTERNAL_FORMAT, GL_TEXTURE_RED_SIZE, GL_TEXTURE_RED_TYPE, |
| GL_TEXTURE_SAMPLES, GL_TEXTURE_SHARED_SIZE, GL_TEXTURE_STENCIL_SIZE, GL_TEXTURE_WIDTH: { |
| // version 3.1 |
| } |
| default: { |
| glErrorInvalidEnum(pname) |
| } |
| } |
| // TODO |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetTexParameter.xml","OpenGL ES 2.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetTexParameter.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetTexParameter.xhtml","OpenGL ES 3.1") |
| cmd void glGetTexParameterfv(GLenum target, GLenum parameter, GLfloat* values) { |
| minRequiredVersion(2, 0) |
| switch (target) { |
| case GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP: { |
| // version 2.0 |
| } |
| case GL_TEXTURE_2D_ARRAY, GL_TEXTURE_3D: { |
| minRequiredVersion(3, 0) |
| } |
| case GL_TEXTURE_2D_MULTISAMPLE: { |
| minRequiredVersion(3, 1) |
| } |
| default: { |
| glErrorInvalidEnum(target) |
| } |
| } |
| switch (parameter) { |
| case GL_TEXTURE_MAG_FILTER, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T: { |
| // version 2.0 |
| } |
| case GL_TEXTURE_BASE_LEVEL, GL_TEXTURE_COMPARE_FUNC, GL_TEXTURE_COMPARE_MODE, |
| GL_TEXTURE_IMMUTABLE_FORMAT, GL_TEXTURE_MAX_LEVEL, GL_TEXTURE_MAX_LOD, GL_TEXTURE_MIN_LOD, |
| GL_TEXTURE_SWIZZLE_A, GL_TEXTURE_SWIZZLE_B, GL_TEXTURE_SWIZZLE_G, GL_TEXTURE_SWIZZLE_R, |
| GL_TEXTURE_WRAP_R: { |
| minRequiredVersion(3, 0) |
| } |
| case GL_DEPTH_STENCIL_TEXTURE_MODE, GL_IMAGE_FORMAT_COMPATIBILITY_TYPE, |
| GL_TEXTURE_IMMUTABLE_LEVELS: { |
| minRequiredVersion(3, 1) |
| } |
| default: { |
| glErrorInvalidEnum(parameter) |
| } |
| } |
| |
| ctx := GetContext() |
| id := ctx.TextureUnits[ctx.ActiveTextureUnit][target] |
| t := ctx.Instances.Textures[id] |
| values[0] = switch (parameter) { |
| case GL_TEXTURE_MAG_FILTER: as!GLfloat(t.MagFilter) |
| case GL_TEXTURE_MIN_FILTER: as!GLfloat(t.MinFilter) |
| case GL_TEXTURE_WRAP_S: as!GLfloat(t.WrapS) |
| case GL_TEXTURE_WRAP_T: as!GLfloat(t.WrapT) |
| case GL_TEXTURE_MAX_ANISOTROPY_EXT: as!GLfloat(t.MaxAnisotropy) |
| case GL_TEXTURE_SWIZZLE_R: as!GLfloat(t.SwizzleR) |
| case GL_TEXTURE_SWIZZLE_G: as!GLfloat(t.SwizzleG) |
| case GL_TEXTURE_SWIZZLE_B: as!GLfloat(t.SwizzleB) |
| case GL_TEXTURE_SWIZZLE_A: as!GLfloat(t.SwizzleA) |
| } |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetTexParameter.xml","OpenGL ES 2.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetTexParameter.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetTexParameter.xhtml","OpenGL ES 3.1") |
| cmd void glGetTexParameteriv(GLenum target, GLenum parameter, GLint* values) { |
| minRequiredVersion(2, 0) |
| switch (target) { |
| case GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP: { |
| // version 2.0 |
| } |
| case GL_TEXTURE_2D_ARRAY, GL_TEXTURE_3D: { |
| minRequiredVersion(3, 0) |
| } |
| case GL_TEXTURE_2D_MULTISAMPLE: { |
| minRequiredVersion(3, 1) |
| } |
| default: { |
| glErrorInvalidEnum(target) |
| } |
| } |
| switch (parameter) { |
| case GL_TEXTURE_MAG_FILTER, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T: { |
| // version 2.0 |
| } |
| case GL_TEXTURE_BASE_LEVEL, GL_TEXTURE_COMPARE_FUNC, GL_TEXTURE_COMPARE_MODE, |
| GL_TEXTURE_IMMUTABLE_FORMAT, GL_TEXTURE_MAX_LEVEL, GL_TEXTURE_MAX_LOD, GL_TEXTURE_MIN_LOD, |
| GL_TEXTURE_SWIZZLE_A, GL_TEXTURE_SWIZZLE_B, GL_TEXTURE_SWIZZLE_G, GL_TEXTURE_SWIZZLE_R, |
| GL_TEXTURE_WRAP_R: { |
| minRequiredVersion(3, 0) |
| } |
| case GL_DEPTH_STENCIL_TEXTURE_MODE, GL_IMAGE_FORMAT_COMPATIBILITY_TYPE, |
| GL_TEXTURE_IMMUTABLE_LEVELS: { |
| minRequiredVersion(3, 1) |
| } |
| default: { |
| glErrorInvalidEnum(parameter) |
| } |
| } |
| |
| ctx := GetContext() |
| id := ctx.TextureUnits[ctx.ActiveTextureUnit][target] |
| t := ctx.Instances.Textures[id] |
| values[0] = switch (parameter) { |
| case GL_TEXTURE_MAG_FILTER: as!GLint(t.MagFilter) |
| case GL_TEXTURE_MIN_FILTER: as!GLint(t.MinFilter) |
| case GL_TEXTURE_WRAP_S: as!GLint(t.WrapS) |
| case GL_TEXTURE_WRAP_T: as!GLint(t.WrapT) |
| case GL_TEXTURE_MAX_ANISOTROPY_EXT: as!GLint(t.MaxAnisotropy) |
| case GL_TEXTURE_SWIZZLE_R: as!GLint(t.SwizzleR) |
| case GL_TEXTURE_SWIZZLE_G: as!GLint(t.SwizzleG) |
| case GL_TEXTURE_SWIZZLE_B: as!GLint(t.SwizzleB) |
| case GL_TEXTURE_SWIZZLE_A: as!GLint(t.SwizzleA) |
| } |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glIsSampler.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glIsSampler.xhtml","OpenGL ES 3.1") |
| cmd bool glIsSampler(SamplerId sampler) { |
| minRequiredVersion(3, 0) |
| // TODO |
| return ? |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glIsTexture.xml","OpenGL ES 2.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glIsTexture.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glIsTexture.xhtml","OpenGL ES 3.1") |
| cmd bool glIsTexture(TextureId texture) { |
| minRequiredVersion(2, 0) |
| |
| ctx := GetContext() |
| return texture in ctx.Instances.Textures |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml","OpenGL ES 2.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glPixelStorei.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glPixelStorei.xhtml","OpenGL ES 3.1") |
| cmd void glPixelStorei(GLenum parameter, GLint value) { |
| minRequiredVersion(2, 0) |
| switch (parameter) { |
| case GL_PACK_ALIGNMENT, GL_UNPACK_ALIGNMENT: { |
| // version 2.0 |
| } |
| case GL_PACK_IMAGE_HEIGHT, GL_PACK_ROW_LENGTH, GL_PACK_SKIP_IMAGES, GL_PACK_SKIP_PIXELS, |
| GL_PACK_SKIP_ROWS, GL_UNPACK_IMAGE_HEIGHT, GL_UNPACK_ROW_LENGTH, GL_UNPACK_SKIP_IMAGES, |
| GL_UNPACK_SKIP_PIXELS, GL_UNPACK_SKIP_ROWS: { |
| minRequiredVersion(3, 0) |
| } |
| default: { |
| glErrorInvalidEnum(parameter) |
| } |
| } |
| |
| assert((value == 1) || (value == 2) || (value == 4) || (value == 8)) |
| ctx := GetContext() |
| ctx.PixelStorage[parameter] = value |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glSamplerParameter.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glSamplerParameter.xhtml","OpenGL ES 3.1") |
| cmd void glSamplerParameterf(SamplerId sampler, GLenum pname, GLfloat param) { |
| minRequiredVersion(3, 0) |
| switch (pname) { |
| case GL_TEXTURE_COMPARE_FUNC, GL_TEXTURE_COMPARE_MODE, GL_TEXTURE_MAG_FILTER, |
| GL_TEXTURE_MAX_LOD, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MIN_LOD, GL_TEXTURE_WRAP_R, |
| GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T: { |
| // version 3.0 |
| } |
| default: { |
| glErrorInvalidEnum(pname) |
| } |
| } |
| // TODO |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glSamplerParameter.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glSamplerParameter.xhtml","OpenGL ES 3.1") |
| cmd void glSamplerParameterfv(SamplerId sampler, GLenum pname, const GLfloat* param) { |
| minRequiredVersion(3, 0) |
| switch (pname) { |
| case GL_TEXTURE_COMPARE_FUNC, GL_TEXTURE_COMPARE_MODE, GL_TEXTURE_MAG_FILTER, |
| GL_TEXTURE_MAX_LOD, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MIN_LOD, GL_TEXTURE_WRAP_R, |
| GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T: { |
| // version 3.0 |
| } |
| default: { |
| glErrorInvalidEnum(pname) |
| } |
| } |
| // TODO |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glSamplerParameter.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glSamplerParameter.xhtml","OpenGL ES 3.1") |
| cmd void glSamplerParameteri(SamplerId sampler, GLenum pname, GLint param) { |
| minRequiredVersion(3, 0) |
| switch (pname) { |
| case GL_TEXTURE_COMPARE_FUNC, GL_TEXTURE_COMPARE_MODE, GL_TEXTURE_MAG_FILTER, |
| GL_TEXTURE_MAX_LOD, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MIN_LOD, GL_TEXTURE_WRAP_R, |
| GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T: { |
| // version 3.0 |
| } |
| default: { |
| glErrorInvalidEnum(pname) |
| } |
| } |
| // TODO |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glSamplerParameter.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glSamplerParameter.xhtml","OpenGL ES 3.1") |
| cmd void glSamplerParameteriv(SamplerId sampler, GLenum pname, const GLint* param) { |
| minRequiredVersion(3, 0) |
| switch (pname) { |
| case GL_TEXTURE_COMPARE_FUNC, GL_TEXTURE_COMPARE_MODE, GL_TEXTURE_MAG_FILTER, |
| GL_TEXTURE_MAX_LOD, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MIN_LOD, GL_TEXTURE_WRAP_R, |
| GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T: { |
| // version 3.0 |
| } |
| default: { |
| glErrorInvalidEnum(pname) |
| } |
| } |
| // TODO |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glTexImage2D.xml","OpenGL ES 2.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glTexImage2D.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glTexImage2D.xhtml","OpenGL ES 3.1") |
| cmd void glTexImage2D(GLenum target, |
| GLint level, |
| GLint internal_format, |
| GLsizei width, |
| GLsizei height, |
| GLint border, |
| GLenum format, |
| GLenum type, |
| TexturePointer data) { |
| minRequiredVersion(2, 0) |
| switch (target) { |
| case GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, |
| GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, GL_TEXTURE_CUBE_MAP_POSITIVE_X, |
| GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z: { |
| // version 2.0 |
| } |
| default: { |
| glErrorInvalidEnum(target) |
| } |
| } |
| switch (format) { |
| case GL_ALPHA, GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_RGB, GL_RGBA: { |
| // version 2.0 |
| } |
| case GL_DEPTH_COMPONENT, GL_DEPTH_STENCIL, GL_RED, GL_RED_INTEGER, GL_RG, GL_RGBA_INTEGER, |
| GL_RGB_INTEGER, GL_RG_INTEGER: { |
| minRequiredVersion(3, 0) |
| } |
| default: { |
| glErrorInvalidEnum(format) |
| } |
| } |
| switch (type) { |
| case GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT_4_4_4_4, GL_UNSIGNED_SHORT_5_5_5_1, |
| GL_UNSIGNED_SHORT_5_6_5: { |
| // version 2.0 |
| } |
| case GL_HALF_FLOAT_OES: { |
| requiresExtension(GL_OES_texture_half_float) |
| } |
| case GL_BYTE, GL_FLOAT, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, GL_HALF_FLOAT, GL_INT, GL_SHORT, |
| GL_UNSIGNED_INT, GL_UNSIGNED_INT_10F_11F_11F_REV, GL_UNSIGNED_INT_24_8, |
| GL_UNSIGNED_INT_2_10_10_10_REV, GL_UNSIGNED_INT_5_9_9_9_REV, GL_UNSIGNED_SHORT: { |
| minRequiredVersion(3, 0) |
| } |
| default: { |
| glErrorInvalidEnum(type) |
| } |
| } |
| |
| assert(internal_format == as!GLint(format)) |
| assert(border == 0) |
| ctx := GetContext() |
| switch (target) { |
| case GL_TEXTURE_2D: { |
| id := ctx.TextureUnits[ctx.ActiveTextureUnit][GL_TEXTURE_2D] |
| t := ctx.Instances.Textures[id] |
| l := Image( |
| Width: width, |
| Height: height, |
| Size: imageSize(as!u32(width), as!u32(height), format, type), |
| Format: as!GLenum(format) /* TODO: Implicit cast? */, |
| ) |
| if (data != null) { |
| if (ctx.BoundBuffers[GL_PIXEL_UNPACK_BUFFER] == 0) { |
| l.Data = clone(as!u8*(data)[0:l.Size]) |
| } |
| } else { |
| l.Data = make!u8(l.Size) |
| } |
| |
| t.Texture2D[level] = l |
| t.Kind = TEXTURE2D // TODO: Warning/Error if kind has changed? |
| // TODO: Warning/Error if format has changed |
| t.Format = as!GLenum(format) // TODO: Implicit cast? |
| } |
| case GL_TEXTURE_CUBE_MAP_POSITIVE_X, GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z, |
| GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: { |
| id := ctx.TextureUnits[ctx.ActiveTextureUnit][GL_TEXTURE_CUBE_MAP] |
| t := ctx.Instances.Textures[id] |
| l := Image( |
| Width: width, |
| Height: height, |
| Size: imageSize(as!u32(width), as!u32(height), format, type), |
| Format: as!GLenum(format) /* TODO: Implicit cast? */, |
| ) |
| if (data != null) { |
| if (ctx.BoundBuffers[GL_PIXEL_UNPACK_BUFFER] == 0) { |
| l.Data = clone(as!u8*(data)[0:l.Size]) |
| } |
| } else { |
| l.Data = make!u8(l.Size) |
| } |
| cube := t.Cubemap[level] |
| cube.Faces[as!GLenum(target)] = l |
| t.Cubemap[level] = cube |
| t.Kind = CUBEMAP // TODO: Warning/Error if kind has changed? |
| // TODO: Warning/Error if format has changed |
| t.Format = as!GLenum(format) // TODO: Implicit cast? |
| } |
| } |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glTexImage3D.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glTexImage3D.xhtml","OpenGL ES 3.1") |
| cmd void glTexImage3D(GLenum target, |
| GLint level, |
| GLint internalformat, |
| GLsizei width, |
| GLsizei height, |
| GLsizei depth, |
| GLint border, |
| GLenum format, |
| GLenum type, |
| const void* pixels) { |
| minRequiredVersion(3, 0) |
| switch (target) { |
| case GL_TEXTURE_2D_ARRAY, GL_TEXTURE_3D: { |
| // version 3.0 |
| } |
| default: { |
| glErrorInvalidEnum(target) |
| } |
| } |
| switch (format) { |
| case GL_ALPHA, GL_DEPTH_COMPONENT, GL_DEPTH_STENCIL, GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_RED, |
| GL_RED_INTEGER, GL_RG, GL_RGB, GL_RGBA, GL_RGBA_INTEGER, GL_RGB_INTEGER, GL_RG_INTEGER: { |
| // version 3.0 |
| } |
| default: { |
| glErrorInvalidEnum(format) |
| } |
| } |
| switch (type) { |
| case GL_HALF_FLOAT_OES: { |
| requiresExtension(GL_OES_texture_half_float) |
| } |
| case GL_BYTE, GL_FLOAT, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, GL_HALF_FLOAT, GL_INT, GL_SHORT, |
| GL_UNSIGNED_BYTE, GL_UNSIGNED_INT, GL_UNSIGNED_INT_10F_11F_11F_REV, GL_UNSIGNED_INT_24_8, |
| GL_UNSIGNED_INT_2_10_10_10_REV, GL_UNSIGNED_INT_5_9_9_9_REV, GL_UNSIGNED_SHORT, |
| GL_UNSIGNED_SHORT_4_4_4_4, GL_UNSIGNED_SHORT_5_5_5_1, GL_UNSIGNED_SHORT_5_6_5: { |
| // version 3.0 |
| } |
| default: { |
| glErrorInvalidEnum(type) |
| } |
| } |
| // TODO |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glTexParameter.xml","OpenGL ES 2.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glTexParameter.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glTexParameter.xhtml","OpenGL ES 3.1") |
| cmd void glTexParameterf(GLenum target, GLenum parameter, GLfloat value) { |
| minRequiredVersion(2, 0) |
| switch (target) { |
| case GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP: { |
| // version 2.0 |
| } |
| case GL_TEXTURE_2D_ARRAY, GL_TEXTURE_3D: { |
| minRequiredVersion(3, 0) |
| } |
| case GL_TEXTURE_2D_MULTISAMPLE: { |
| minRequiredVersion(3, 1) |
| } |
| default: { |
| glErrorInvalidEnum(target) |
| } |
| } |
| switch (parameter) { |
| case GL_TEXTURE_MAG_FILTER, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T: { |
| // version 2.0 |
| } |
| case GL_TEXTURE_BASE_LEVEL, GL_TEXTURE_COMPARE_FUNC, GL_TEXTURE_COMPARE_MODE, |
| GL_TEXTURE_MAX_LEVEL, GL_TEXTURE_MAX_LOD, GL_TEXTURE_MIN_LOD, GL_TEXTURE_SWIZZLE_A, |
| GL_TEXTURE_SWIZZLE_B, GL_TEXTURE_SWIZZLE_G, GL_TEXTURE_SWIZZLE_R, GL_TEXTURE_WRAP_R: { |
| minRequiredVersion(3, 0) |
| } |
| case GL_DEPTH_STENCIL_TEXTURE_MODE: { |
| minRequiredVersion(3, 1) |
| } |
| default: { |
| glErrorInvalidEnum(parameter) |
| } |
| } |
| |
| ctx := GetContext() |
| id := ctx.TextureUnits[ctx.ActiveTextureUnit][target] |
| t := ctx.Instances.Textures[id] |
| switch (parameter) { |
| case GL_TEXTURE_MAG_FILTER: t.MagFilter = as!GLenum(value) |
| case GL_TEXTURE_MIN_FILTER: t.MinFilter = as!GLenum(value) |
| case GL_TEXTURE_WRAP_S: t.WrapS = as!GLenum(value) |
| case GL_TEXTURE_WRAP_T: t.WrapT = as!GLenum(value) |
| case GL_TEXTURE_MAX_ANISOTROPY_EXT: t.MaxAnisotropy = as!f32(value) |
| case GL_TEXTURE_SWIZZLE_R: t.SwizzleR = as!GLenum(value) |
| case GL_TEXTURE_SWIZZLE_G: t.SwizzleG = as!GLenum(value) |
| case GL_TEXTURE_SWIZZLE_B: t.SwizzleB = as!GLenum(value) |
| case GL_TEXTURE_SWIZZLE_A: t.SwizzleA = as!GLenum(value) |
| } |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glTexParameter.xml","OpenGL ES 2.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glTexParameter.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glTexParameter.xhtml","OpenGL ES 3.1") |
| cmd void glTexParameterfv(GLenum target, GLenum pname, const GLfloat* params) { |
| minRequiredVersion(2, 0) |
| switch (target) { |
| case GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP: { |
| // version 2.0 |
| } |
| case GL_TEXTURE_2D_ARRAY, GL_TEXTURE_3D: { |
| minRequiredVersion(3, 0) |
| } |
| case GL_TEXTURE_2D_MULTISAMPLE: { |
| minRequiredVersion(3, 1) |
| } |
| default: { |
| glErrorInvalidEnum(target) |
| } |
| } |
| switch (pname) { |
| case GL_TEXTURE_MAG_FILTER, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T: { |
| // version 2.0 |
| } |
| case GL_TEXTURE_BASE_LEVEL, GL_TEXTURE_COMPARE_FUNC, GL_TEXTURE_COMPARE_MODE, |
| GL_TEXTURE_MAX_LEVEL, GL_TEXTURE_MAX_LOD, GL_TEXTURE_MIN_LOD, GL_TEXTURE_SWIZZLE_A, |
| GL_TEXTURE_SWIZZLE_B, GL_TEXTURE_SWIZZLE_G, GL_TEXTURE_SWIZZLE_R, GL_TEXTURE_WRAP_R: { |
| minRequiredVersion(3, 0) |
| } |
| case GL_DEPTH_STENCIL_TEXTURE_MODE: { |
| minRequiredVersion(3, 1) |
| } |
| default: { |
| glErrorInvalidEnum(pname) |
| } |
| } |
| // TODO |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glTexParameter.xml","OpenGL ES 2.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glTexParameter.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glTexParameter.xhtml","OpenGL ES 3.1") |
| cmd void glTexParameteri(GLenum target, GLenum parameter, GLint value) { |
| minRequiredVersion(2, 0) |
| switch (target) { |
| case GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP: { |
| // version 2.0 |
| } |
| case GL_TEXTURE_2D_ARRAY, GL_TEXTURE_3D: { |
| minRequiredVersion(3, 0) |
| } |
| case GL_TEXTURE_2D_MULTISAMPLE: { |
| minRequiredVersion(3, 1) |
| } |
| default: { |
| glErrorInvalidEnum(target) |
| } |
| } |
| switch (parameter) { |
| case GL_TEXTURE_MAG_FILTER, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T: { |
| // version 2.0 |
| } |
| case GL_TEXTURE_BASE_LEVEL, GL_TEXTURE_COMPARE_FUNC, GL_TEXTURE_COMPARE_MODE, |
| GL_TEXTURE_MAX_LEVEL, GL_TEXTURE_MAX_LOD, GL_TEXTURE_MIN_LOD, GL_TEXTURE_SWIZZLE_A, |
| GL_TEXTURE_SWIZZLE_B, GL_TEXTURE_SWIZZLE_G, GL_TEXTURE_SWIZZLE_R, GL_TEXTURE_WRAP_R: { |
| minRequiredVersion(3, 0) |
| } |
| case GL_DEPTH_STENCIL_TEXTURE_MODE: { |
| minRequiredVersion(3, 1) |
| } |
| default: { |
| glErrorInvalidEnum(parameter) |
| } |
| } |
| |
| ctx := GetContext() |
| id := ctx.TextureUnits[ctx.ActiveTextureUnit][target] |
| t := ctx.Instances.Textures[id] |
| switch (parameter) { |
| case GL_TEXTURE_MAG_FILTER: t.MagFilter = as!GLenum(value) |
| case GL_TEXTURE_MIN_FILTER: t.MinFilter = as!GLenum(value) |
| case GL_TEXTURE_WRAP_S: t.WrapS = as!GLenum(value) |
| case GL_TEXTURE_WRAP_T: t.WrapT = as!GLenum(value) |
| case GL_TEXTURE_MAX_ANISOTROPY_EXT: t.MaxAnisotropy = as!f32(value) |
| case GL_TEXTURE_SWIZZLE_R: t.SwizzleR = as!GLenum(value) |
| case GL_TEXTURE_SWIZZLE_G: t.SwizzleG = as!GLenum(value) |
| case GL_TEXTURE_SWIZZLE_B: t.SwizzleB = as!GLenum(value) |
| case GL_TEXTURE_SWIZZLE_A: t.SwizzleA = as!GLenum(value) |
| } |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glTexParameter.xml","OpenGL ES 2.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glTexParameter.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glTexParameter.xhtml","OpenGL ES 3.1") |
| cmd void glTexParameteriv(GLenum target, GLenum pname, const GLint* params) { |
| minRequiredVersion(2, 0) |
| switch (target) { |
| case GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP: { |
| // version 2.0 |
| } |
| case GL_TEXTURE_2D_ARRAY, GL_TEXTURE_3D: { |
| minRequiredVersion(3, 0) |
| } |
| case GL_TEXTURE_2D_MULTISAMPLE: { |
| minRequiredVersion(3, 1) |
| } |
| default: { |
| glErrorInvalidEnum(target) |
| } |
| } |
| switch (pname) { |
| case GL_TEXTURE_MAG_FILTER, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T: { |
| // version 2.0 |
| } |
| case GL_TEXTURE_BASE_LEVEL, GL_TEXTURE_COMPARE_FUNC, GL_TEXTURE_COMPARE_MODE, |
| GL_TEXTURE_MAX_LEVEL, GL_TEXTURE_MAX_LOD, GL_TEXTURE_MIN_LOD, GL_TEXTURE_SWIZZLE_A, |
| GL_TEXTURE_SWIZZLE_B, GL_TEXTURE_SWIZZLE_G, GL_TEXTURE_SWIZZLE_R, GL_TEXTURE_WRAP_R: { |
| minRequiredVersion(3, 0) |
| } |
| case GL_DEPTH_STENCIL_TEXTURE_MODE: { |
| minRequiredVersion(3, 1) |
| } |
| default: { |
| glErrorInvalidEnum(pname) |
| } |
| } |
| // TODO |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glTexStorage2D.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glTexStorage2D.xhtml","OpenGL ES 3.1") |
| cmd void glTexStorage2D(GLenum target, |
| GLsizei levels, |
| GLenum internalformat, |
| GLsizei width, |
| GLsizei height) { |
| minRequiredVersion(3, 0) |
| switch (target) { |
| case GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP: { |
| // version 3.0 |
| } |
| default: { |
| glErrorInvalidEnum(target) |
| } |
| } |
| switch (internalformat) { |
| case GL_COMPRESSED_R11_EAC, GL_COMPRESSED_RG11_EAC, GL_COMPRESSED_RGB8_ETC2, |
| GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, GL_COMPRESSED_RGBA8_ETC2_EAC, |
| GL_COMPRESSED_SIGNED_R11_EAC, GL_COMPRESSED_SIGNED_RG11_EAC, |
| GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, GL_COMPRESSED_SRGB8_ETC2, |
| GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, GL_DEPTH24_STENCIL8, GL_DEPTH32F_STENCIL8, |
| GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT24, GL_DEPTH_COMPONENT32F, GL_R11F_G11F_B10F, |
| GL_R16F, GL_R16I, GL_R16UI, GL_R32F, GL_R32I, GL_R32UI, GL_R8, GL_R8I, GL_R8UI, |
| GL_R8_SNORM, GL_RG16F, GL_RG16I, GL_RG16UI, GL_RG32F, GL_RG32I, GL_RG32UI, GL_RG8, GL_RG8I, |
| GL_RG8UI, GL_RG8_SNORM, GL_RGB10_A2, GL_RGB10_A2UI, GL_RGB16F, GL_RGB16I, GL_RGB16UI, |
| GL_RGB32F, GL_RGB32I, GL_RGB32UI, GL_RGB565, GL_RGB5_A1, GL_RGB8, GL_RGB8I, GL_RGB8UI, |
| GL_RGB8_SNORM, GL_RGB9_E5, GL_RGBA16F, GL_RGBA16I, GL_RGBA16UI, GL_RGBA32F, GL_RGBA32I, |
| GL_RGBA32UI, GL_RGBA4, GL_RGBA8, GL_RGBA8I, GL_RGBA8UI, GL_RGBA8_SNORM, GL_SRGB8, |
| GL_SRGB8_ALPHA8: { |
| // version 3.0 |
| } |
| default: { |
| glErrorInvalidEnum(internalformat) |
| } |
| } |
| // TODO |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glTexStorage2DMultisample.xhtml","OpenGL ES 3.1") |
| cmd void glTexStorage2DMultisample(GLenum target, |
| GLsizei samples, |
| GLenum internalformat, |
| GLsizei width, |
| GLsizei height, |
| GLboolean fixedsamplelocations) { |
| minRequiredVersion(3, 1) |
| switch (target) { |
| case GL_TEXTURE_2D_MULTISAMPLE: { |
| // version 3.1 |
| } |
| default: { |
| glErrorInvalidEnum(target) |
| } |
| } |
| switch (internalformat) { |
| case GL_DEPTH24_STENCIL8, GL_DEPTH32F_STENCIL8, GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT24, |
| GL_DEPTH_COMPONENT32F, GL_R11F_G11F_B10F, GL_R16F, GL_R16I, GL_R16UI, GL_R32F, GL_R32I, |
| GL_R32UI, GL_R8, GL_R8I, GL_R8UI, GL_R8_SNORM, GL_RG16F, GL_RG16I, GL_RG16UI, GL_RG32F, |
| GL_RG32I, GL_RG32UI, GL_RG8, GL_RG8I, GL_RG8UI, GL_RG8_SNORM, GL_RGB10_A2, GL_RGB10_A2UI, |
| GL_RGB16F, GL_RGB16I, GL_RGB16UI, GL_RGB32F, GL_RGB32I, GL_RGB32UI, GL_RGB565, GL_RGB5_A1, |
| GL_RGB8, GL_RGB8I, GL_RGB8UI, GL_RGB8_SNORM, GL_RGB9_E5, GL_RGBA16F, GL_RGBA16I, |
| GL_RGBA16UI, GL_RGBA32F, GL_RGBA32I, GL_RGBA32UI, GL_RGBA4, GL_RGBA8, GL_RGBA8I, |
| GL_RGBA8UI, GL_RGBA8_SNORM, GL_SRGB8, GL_SRGB8_ALPHA8: { |
| // version 3.1 |
| } |
| default: { |
| glErrorInvalidEnum(internalformat) |
| } |
| } |
| // TODO |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glTexStorage3D.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glTexStorage3D.xhtml","OpenGL ES 3.1") |
| cmd void glTexStorage3D(GLenum target, |
| GLsizei levels, |
| GLenum internalformat, |
| GLsizei width, |
| GLsizei height, |
| GLsizei depth) { |
| minRequiredVersion(3, 0) |
| switch (target) { |
| case GL_TEXTURE_2D_ARRAY, GL_TEXTURE_3D: { |
| // version 3.0 |
| } |
| default: { |
| glErrorInvalidEnum(target) |
| } |
| } |
| switch (internalformat) { |
| case GL_COMPRESSED_R11_EAC, GL_COMPRESSED_RG11_EAC, GL_COMPRESSED_RGB8_ETC2, |
| GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, GL_COMPRESSED_RGBA8_ETC2_EAC, |
| GL_COMPRESSED_SIGNED_R11_EAC, GL_COMPRESSED_SIGNED_RG11_EAC, |
| GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, GL_COMPRESSED_SRGB8_ETC2, |
| GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, GL_DEPTH24_STENCIL8, GL_DEPTH32F_STENCIL8, |
| GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT24, GL_DEPTH_COMPONENT32F, GL_R11F_G11F_B10F, |
| GL_R16F, GL_R16I, GL_R16UI, GL_R32F, GL_R32I, GL_R32UI, GL_R8, GL_R8I, GL_R8UI, |
| GL_R8_SNORM, GL_RG16F, GL_RG16I, GL_RG16UI, GL_RG32F, GL_RG32I, GL_RG32UI, GL_RG8, GL_RG8I, |
| GL_RG8UI, GL_RG8_SNORM, GL_RGB10_A2, GL_RGB10_A2UI, GL_RGB16F, GL_RGB16I, GL_RGB16UI, |
| GL_RGB32F, GL_RGB32I, GL_RGB32UI, GL_RGB565, GL_RGB5_A1, GL_RGB8, GL_RGB8I, GL_RGB8UI, |
| GL_RGB8_SNORM, GL_RGB9_E5, GL_RGBA16F, GL_RGBA16I, GL_RGBA16UI, GL_RGBA32F, GL_RGBA32I, |
| GL_RGBA32UI, GL_RGBA4, GL_RGBA8, GL_RGBA8I, GL_RGBA8UI, GL_RGBA8_SNORM, GL_SRGB8, |
| GL_SRGB8_ALPHA8: { |
| // version 3.0 |
| } |
| default: { |
| glErrorInvalidEnum(internalformat) |
| } |
| } |
| // TODO |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glTexSubImage2D.xml","OpenGL ES 2.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glTexSubImage2D.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glTexSubImage2D.xhtml","OpenGL ES 3.1") |
| cmd void glTexSubImage2D(GLenum target, |
| GLint level, |
| GLint xoffset, |
| GLint yoffset, |
| GLsizei width, |
| GLsizei height, |
| GLenum format, |
| GLenum type, |
| TexturePointer data) { |
| minRequiredVersion(2, 0) |
| switch (target) { |
| case GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, |
| GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, GL_TEXTURE_CUBE_MAP_POSITIVE_X, |
| GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z: { |
| // version 2.0 |
| } |
| default: { |
| glErrorInvalidEnum(target) |
| } |
| } |
| switch (format) { |
| case GL_ALPHA, GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_RGB, GL_RGBA: { |
| // version 2.0 |
| } |
| case GL_DEPTH_COMPONENT, GL_DEPTH_STENCIL, GL_RED, GL_RED_INTEGER, GL_RG, GL_RGBA_INTEGER, |
| GL_RGB_INTEGER, GL_RG_INTEGER: { |
| minRequiredVersion(3, 0) |
| } |
| default: { |
| glErrorInvalidEnum(format) |
| } |
| } |
| switch (type) { |
| case GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT_4_4_4_4, GL_UNSIGNED_SHORT_5_5_5_1, |
| GL_UNSIGNED_SHORT_5_6_5: { |
| // version 2.0 |
| } |
| case GL_HALF_FLOAT_OES: { |
| requiresExtension(GL_OES_texture_half_float) |
| } |
| case GL_BYTE, GL_FLOAT, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, GL_HALF_FLOAT, GL_INT, GL_SHORT, |
| GL_UNSIGNED_INT, GL_UNSIGNED_INT_10F_11F_11F_REV, GL_UNSIGNED_INT_24_8, |
| GL_UNSIGNED_INT_2_10_10_10_REV, GL_UNSIGNED_INT_5_9_9_9_REV, GL_UNSIGNED_SHORT: { |
| minRequiredVersion(3, 0) |
| } |
| default: { |
| glErrorInvalidEnum(type) |
| } |
| } |
| |
| ctx := GetContext() |
| // TODO: This does not consider xoffset or yoffset and completely replaces the level. |
| // FIX. |
| switch (target) { |
| case GL_TEXTURE_2D: { |
| id := ctx.TextureUnits[ctx.ActiveTextureUnit][GL_TEXTURE_2D] |
| t := ctx.Instances.Textures[id] |
| l := Image( |
| Width: width, |
| Height: height, |
| Size: imageSize(as!u32(width), as!u32(height), format, type), |
| Format: as!GLenum(format) /* TODO: Implicit cast? */, |
| ) |
| if (ctx.BoundBuffers[GL_PIXEL_UNPACK_BUFFER] == 0) && (data != null) { |
| l.Data = clone(as!u8*(data)[0:l.Size]) |
| } |
| t.Texture2D[level] = l |
| t.Kind = TEXTURE2D // TODO: Warning/Error if kind has changed? |
| // TODO: Warning/Error if format has changed |
| t.Format = as!GLenum(format) // TODO: Implicit cast? |
| } |
| case GL_TEXTURE_CUBE_MAP_POSITIVE_X, GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z, |
| GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: { |
| id := ctx.TextureUnits[ctx.ActiveTextureUnit][GL_TEXTURE_CUBE_MAP] |
| t := ctx.Instances.Textures[id] |
| l := Image( |
| Width: width, |
| Height: height, |
| Size: imageSize(as!u32(width), as!u32(height), format, type), |
| Format: as!GLenum(format) /* TODO: Implicit cast? */, |
| ) |
| if (ctx.BoundBuffers[GL_PIXEL_UNPACK_BUFFER] == 0) && (data != null) { |
| l.Data = clone(as!u8*(data)[0:l.Size]) |
| } |
| cube := t.Cubemap[level] |
| cube.Faces[as!GLenum(target)] = l |
| t.Cubemap[level] = cube |
| t.Kind = CUBEMAP // TODO: Warning/Error if kind has changed? |
| // TODO: Warning/Error if format has changed |
| t.Format = as!GLenum(format) // TODO: Implicit cast? |
| } |
| } |
| } |
| |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glTexSubImage3D.xhtml","OpenGL ES 3.0") |
| @Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glTexSubImage3D.xhtml","OpenGL ES 3.1") |
| cmd void glTexSubImage3D(GLenum target, |
| GLint level, |
| GLint xoffset, |
| GLint yoffset, |
| GLint zoffset, |
| GLsizei width, |
| GLsizei height, |
| GLsizei depth, |
| GLenum format, |
| GLenum type, |
| const void* pixels) { |
| minRequiredVersion(3, 0) |
| switch (target) { |
| case GL_TEXTURE_2D_ARRAY, GL_TEXTURE_3D: { |
| // version 3.0 |
| } |
| default: { |
| glErrorInvalidEnum(target) |
| } |
| } |
| switch (format) { |
| case GL_ALPHA, GL_DEPTH_COMPONENT, GL_DEPTH_STENCIL, GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_RED, |
| GL_RED_INTEGER, GL_RG, GL_RGB, GL_RGBA, GL_RGBA_INTEGER, GL_RGB_INTEGER, GL_RG_INTEGER: { |
| // version 3.0 |
| } |
| default: { |
| glErrorInvalidEnum(format) |
| } |
| } |
| switch (type) { |
| case GL_HALF_FLOAT_OES: { |
| requiresExtension(GL_OES_texture_half_float) |
| } |
| case GL_BYTE, GL_FLOAT, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, GL_HALF_FLOAT, GL_INT, GL_SHORT, |
| GL_UNSIGNED_BYTE, GL_UNSIGNED_INT, GL_UNSIGNED_INT_10F_11F_11F_REV, GL_UNSIGNED_INT_24_8, |
| GL_UNSIGNED_INT_2_10_10_10_REV, GL_UNSIGNED_INT_5_9_9_9_REV, GL_UNSIGNED_SHORT, |
| GL_UNSIGNED_SHORT_4_4_4_4, GL_UNSIGNED_SHORT_5_5_5_1, GL_UNSIGNED_SHORT_5_6_5: { |
| // version 3.0 |
| } |
| default: { |
| glErrorInvalidEnum(type) |
| } |
| } |
| // TODO |
| } |
| |