blob: 5efa2ef1c98516b55996caa5d3226df84eb0ba50 [file] [log] [blame]
// 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/man3/html/glBindVertexArray.xhtml","OpenGL ES 3.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glBindVertexArray.xhtml","OpenGL ES 3.1")
cmd void glBindVertexArray(VertexArrayId array) {
minRequiredVersion(3, 0)
ctx := GetContext()
if !(array in ctx.Instances.VertexArrays) {
ctx.Instances.VertexArrays[array] = new!VertexArray()
}
ctx.BoundVertexArray = array
}
@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glBindVertexBuffer.xhtml","OpenGL ES 3.1")
cmd void glBindVertexBuffer(GLuint bindingindex, BufferId buffer, GLintptr offset, GLsizei stride) {
minRequiredVersion(3, 1)
// TODO
}
@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glDeleteVertexArrays.xhtml","OpenGL ES 3.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glDeleteVertexArrays.xhtml","OpenGL ES 3.1")
cmd void glDeleteVertexArrays(GLsizei count, const VertexArrayId* arrays) {
minRequiredVersion(3, 0)
ctx := GetContext()
a := arrays[0:count]
for i in (0 .. count) {
ctx.Instances.VertexArrays[a[i]] = null
}
}
@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glEnableVertexAttribArray.xml","OpenGL ES 2.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glEnableVertexAttribArray.xhtml","OpenGL ES 3.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glEnableVertexAttribArray.xhtml","OpenGL ES 3.1")
cmd void glDisableVertexAttribArray(AttributeLocation location) {
minRequiredVersion(2, 0)
ctx := GetContext()
ctx.VertexAttributeArrays[location].Enabled = false
}
@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glEnableVertexAttribArray.xml","OpenGL ES 2.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glEnableVertexAttribArray.xhtml","OpenGL ES 3.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glEnableVertexAttribArray.xhtml","OpenGL ES 3.1")
cmd void glEnableVertexAttribArray(AttributeLocation location) {
minRequiredVersion(2, 0)
ctx := GetContext()
ctx.VertexAttributeArrays[location].Enabled = true
}
@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGenVertexArrays.xhtml","OpenGL ES 3.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGenVertexArrays.xhtml","OpenGL ES 3.1")
cmd void glGenVertexArrays(GLsizei count, VertexArrayId* arrays) {
minRequiredVersion(3, 0)
a := arrays[0:count]
ctx := GetContext()
for i in (0 .. count) {
id := as!VertexArrayId(?)
ctx.Instances.VertexArrays[id] = new!VertexArray()
a[i] = id
}
}
@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetVertexAttrib.xhtml","OpenGL ES 3.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetVertexAttrib.xhtml","OpenGL ES 3.1")
cmd void glGetVertexAttribIiv(AttributeLocation index, GLenum pname, GLint* params) {
minRequiredVersion(3, 0)
switch (pname) {
case GL_CURRENT_VERTEX_ATTRIB, GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING,
GL_VERTEX_ATTRIB_ARRAY_DIVISOR, GL_VERTEX_ATTRIB_ARRAY_ENABLED,
GL_VERTEX_ATTRIB_ARRAY_INTEGER, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED,
GL_VERTEX_ATTRIB_ARRAY_SIZE, GL_VERTEX_ATTRIB_ARRAY_STRIDE, GL_VERTEX_ATTRIB_ARRAY_TYPE: {
// version 3.0
}
case GL_VERTEX_ATTRIB_BINDING: {
minRequiredVersion(3, 1)
}
default: {
glErrorInvalidEnum(pname)
}
}
// TODO
}
@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetVertexAttrib.xhtml","OpenGL ES 3.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetVertexAttrib.xhtml","OpenGL ES 3.1")
cmd void glGetVertexAttribIuiv(AttributeLocation index, GLenum pname, GLuint* params) {
minRequiredVersion(3, 0)
switch (pname) {
case GL_CURRENT_VERTEX_ATTRIB, GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING,
GL_VERTEX_ATTRIB_ARRAY_DIVISOR, GL_VERTEX_ATTRIB_ARRAY_ENABLED,
GL_VERTEX_ATTRIB_ARRAY_INTEGER, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED,
GL_VERTEX_ATTRIB_ARRAY_SIZE, GL_VERTEX_ATTRIB_ARRAY_STRIDE, GL_VERTEX_ATTRIB_ARRAY_TYPE: {
// version 3.0
}
case GL_VERTEX_ATTRIB_BINDING: {
minRequiredVersion(3, 1)
}
default: {
glErrorInvalidEnum(pname)
}
}
// TODO
}
@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetVertexAttribPointerv.xml","OpenGL ES 2.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetVertexAttribPointerv.xhtml","OpenGL ES 3.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetVertexAttribPointerv.xhtml","OpenGL ES 3.1")
cmd void glGetVertexAttribPointerv(AttributeLocation index, GLenum pname, void** pointer) {
minRequiredVersion(2, 0)
switch (pname) {
case GL_VERTEX_ATTRIB_ARRAY_POINTER: {
// version 2.0
}
default: {
glErrorInvalidEnum(pname)
}
}
// TODO
}
@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetVertexAttrib.xml","OpenGL ES 2.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetVertexAttrib.xhtml","OpenGL ES 3.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetVertexAttrib.xhtml","OpenGL ES 3.1")
cmd void glGetVertexAttribfv(AttributeLocation index, GLenum pname, GLfloat* params) {
minRequiredVersion(2, 0)
switch (pname) {
case GL_CURRENT_VERTEX_ATTRIB, GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING,
GL_VERTEX_ATTRIB_ARRAY_ENABLED, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED,
GL_VERTEX_ATTRIB_ARRAY_SIZE, GL_VERTEX_ATTRIB_ARRAY_STRIDE, GL_VERTEX_ATTRIB_ARRAY_TYPE: {
// version 2.0
}
case GL_VERTEX_ATTRIB_ARRAY_DIVISOR, GL_VERTEX_ATTRIB_ARRAY_INTEGER: {
minRequiredVersion(3, 0)
}
case GL_VERTEX_ATTRIB_BINDING: {
minRequiredVersion(3, 1)
}
default: {
glErrorInvalidEnum(pname)
}
}
// TODO
}
@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetVertexAttrib.xml","OpenGL ES 2.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glGetVertexAttrib.xhtml","OpenGL ES 3.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glGetVertexAttrib.xhtml","OpenGL ES 3.1")
cmd void glGetVertexAttribiv(AttributeLocation index, GLenum pname, GLint* params) {
minRequiredVersion(2, 0)
switch (pname) {
case GL_CURRENT_VERTEX_ATTRIB, GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING,
GL_VERTEX_ATTRIB_ARRAY_ENABLED, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED,
GL_VERTEX_ATTRIB_ARRAY_SIZE, GL_VERTEX_ATTRIB_ARRAY_STRIDE, GL_VERTEX_ATTRIB_ARRAY_TYPE: {
// version 2.0
}
case GL_VERTEX_ATTRIB_ARRAY_DIVISOR, GL_VERTEX_ATTRIB_ARRAY_INTEGER: {
minRequiredVersion(3, 0)
}
case GL_VERTEX_ATTRIB_BINDING: {
minRequiredVersion(3, 1)
}
default: {
glErrorInvalidEnum(pname)
}
}
// TODO
}
@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glIsVertexArray.xhtml","OpenGL ES 3.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glIsVertexArray.xhtml","OpenGL ES 3.1")
cmd bool glIsVertexArray(VertexArrayId array) {
minRequiredVersion(3, 0)
// TODO
return ?
}
@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glVertexAttrib.xml","OpenGL ES 2.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttrib.xhtml","OpenGL ES 3.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttrib.xhtml","OpenGL ES 3.1")
cmd void glVertexAttrib1f(AttributeLocation location, GLfloat value0) {
minRequiredVersion(2, 0)
}
@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glVertexAttrib.xml","OpenGL ES 2.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttrib.xhtml","OpenGL ES 3.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttrib.xhtml","OpenGL ES 3.1")
cmd void glVertexAttrib1fv(AttributeLocation location, const GLfloat* value) {
minRequiredVersion(2, 0)
read(value[0:1])
}
@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glVertexAttrib.xml","OpenGL ES 2.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttrib.xhtml","OpenGL ES 3.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttrib.xhtml","OpenGL ES 3.1")
cmd void glVertexAttrib2f(AttributeLocation location, GLfloat value0, GLfloat value1) {
minRequiredVersion(2, 0)
}
@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glVertexAttrib.xml","OpenGL ES 2.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttrib.xhtml","OpenGL ES 3.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttrib.xhtml","OpenGL ES 3.1")
cmd void glVertexAttrib2fv(AttributeLocation location, const GLfloat* value) {
minRequiredVersion(2, 0)
read(value[0:2])
}
@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glVertexAttrib.xml","OpenGL ES 2.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttrib.xhtml","OpenGL ES 3.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttrib.xhtml","OpenGL ES 3.1")
cmd void glVertexAttrib3f(AttributeLocation location,
GLfloat value0,
GLfloat value1,
GLfloat value2) {
minRequiredVersion(2, 0)
}
@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glVertexAttrib.xml","OpenGL ES 2.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttrib.xhtml","OpenGL ES 3.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttrib.xhtml","OpenGL ES 3.1")
cmd void glVertexAttrib3fv(AttributeLocation location, const GLfloat* value) {
minRequiredVersion(2, 0)
read(value[0:3])
}
@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glVertexAttrib.xml","OpenGL ES 2.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttrib.xhtml","OpenGL ES 3.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttrib.xhtml","OpenGL ES 3.1")
cmd void glVertexAttrib4f(AttributeLocation location,
GLfloat value0,
GLfloat value1,
GLfloat value2,
GLfloat value3) {
minRequiredVersion(2, 0)
}
@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glVertexAttrib.xml","OpenGL ES 2.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttrib.xhtml","OpenGL ES 3.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttrib.xhtml","OpenGL ES 3.1")
cmd void glVertexAttrib4fv(AttributeLocation location, const GLfloat* value) {
minRequiredVersion(2, 0)
read(value[0:4])
}
@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttribBinding.xhtml","OpenGL ES 3.1")
cmd void glVertexAttribBinding(GLuint attribindex, GLuint bindingindex) {
minRequiredVersion(3, 1)
// TODO
}
@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttribDivisor.xhtml","OpenGL ES 3.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttribDivisor.xhtml","OpenGL ES 3.1")
cmd void glVertexAttribDivisor(AttributeLocation index, GLuint divisor) {
minRequiredVersion(3, 0)
// TODO
}
@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttribFormat.xhtml","OpenGL ES 3.1")
cmd void glVertexAttribFormat(GLuint attribindex,
GLint size,
GLenum type,
GLboolean normalized,
GLuint relativeoffset) {
minRequiredVersion(3, 1)
switch (type) {
case GL_BYTE, GL_FIXED, GL_FLOAT, GL_HALF_FLOAT, GL_INT, GL_INT_2_10_10_10_REV, GL_SHORT,
GL_UNSIGNED_BYTE, GL_UNSIGNED_INT, GL_UNSIGNED_INT_2_10_10_10_REV, GL_UNSIGNED_SHORT: {
// version 3.1
}
default: {
glErrorInvalidEnum(type)
}
}
// TODO
}
@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttrib.xhtml","OpenGL ES 3.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttrib.xhtml","OpenGL ES 3.1")
cmd void glVertexAttribI4i(AttributeLocation index, GLint x, GLint y, GLint z, GLint w) {
minRequiredVersion(3, 0)
// TODO
}
@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttrib.xhtml","OpenGL ES 3.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttrib.xhtml","OpenGL ES 3.1")
cmd void glVertexAttribI4iv(AttributeLocation index, const GLint* v) {
minRequiredVersion(3, 0)
// TODO
}
@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttrib.xhtml","OpenGL ES 3.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttrib.xhtml","OpenGL ES 3.1")
cmd void glVertexAttribI4ui(AttributeLocation index, GLuint x, GLuint y, GLuint z, GLuint w) {
minRequiredVersion(3, 0)
// TODO
}
@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttrib.xhtml","OpenGL ES 3.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttrib.xhtml","OpenGL ES 3.1")
cmd void glVertexAttribI4uiv(AttributeLocation index, const GLuint* v) {
minRequiredVersion(3, 0)
// TODO
}
@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttribFormat.xhtml","OpenGL ES 3.1")
cmd void glVertexAttribIFormat(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset) {
minRequiredVersion(3, 1)
switch (type) {
case GL_BYTE, GL_FIXED, GL_FLOAT, GL_HALF_FLOAT, GL_INT, GL_INT_2_10_10_10_REV, GL_SHORT,
GL_UNSIGNED_BYTE, GL_UNSIGNED_INT, GL_UNSIGNED_INT_2_10_10_10_REV, GL_UNSIGNED_SHORT: {
// version 3.1
}
default: {
glErrorInvalidEnum(type)
}
}
// TODO
}
@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttribPointer.xhtml","OpenGL ES 3.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttribPointer.xhtml","OpenGL ES 3.1")
cmd void glVertexAttribIPointer(AttributeLocation index,
GLint size,
GLenum type,
GLsizei stride,
const void* pointer) {
minRequiredVersion(3, 0)
switch (type) {
case GL_BYTE, GL_INT, GL_SHORT, GL_UNSIGNED_BYTE, GL_UNSIGNED_INT, GL_UNSIGNED_SHORT: {
// version 3.0
}
default: {
glErrorInvalidEnum(type)
}
}
// TODO
}
@Doc("https://www.khronos.org/opengles/sdk/docs/man/xhtml/glVertexAttribPointer.xml","OpenGL ES 2.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man3/html/glVertexAttribPointer.xhtml","OpenGL ES 3.0")
@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexAttribPointer.xhtml","OpenGL ES 3.1")
cmd void glVertexAttribPointer(AttributeLocation location,
GLint size,
GLenum type,
GLboolean normalized,
GLsizei stride,
VertexPointer data) {
minRequiredVersion(2, 0)
switch (type) {
case GL_BYTE, GL_FIXED, GL_FLOAT, GL_SHORT, GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT: {
// version 2.0
}
case GL_HALF_FLOAT, GL_INT, GL_INT_2_10_10_10_REV, GL_UNSIGNED_INT,
GL_UNSIGNED_INT_2_10_10_10_REV: {
minRequiredVersion(3, 0)
}
default: {
glErrorInvalidEnum(type)
}
}
assert((size >= 1) && (size <= 4))
assert(stride >= 0)
ctx := GetContext()
a := ctx.VertexAttributeArrays[location]
a.Size = as!u32(size)
a.Type = type
a.Normalized = normalized
a.Stride = stride
a.Pointer = data
a.Buffer = ctx.BoundBuffers[GL_ARRAY_BUFFER]
}
@Doc("https://www.khronos.org/opengles/sdk/docs/man31/html/glVertexBindingDivisor.xhtml","OpenGL ES 3.1")
cmd void glVertexBindingDivisor(GLuint bindingindex, GLuint divisor) {
minRequiredVersion(3, 1)
// TODO
}