mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-11 21:58:31 +09:00
[Feat] (GL_State/Buffer, GL_Impl/Buffer): implement glBindBufferRange
This commit is contained in:
@@ -506,6 +506,22 @@ namespace MobileGL {
|
|||||||
|
|
||||||
auto& point = MG_State::pGLContext->GetBufferBindingPoint(bufferTarget, index);
|
auto& point = MG_State::pGLContext->GetBufferBindingPoint(bufferTarget, index);
|
||||||
point.Bind(bufferObject);
|
point.Bind(bufferObject);
|
||||||
|
point.ClearRange();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BindBufferRange_State(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) {
|
||||||
|
BufferTarget bufferTarget = MG_Util::ConvertGLEnumToBufferTarget(target);
|
||||||
|
if (!BufferImpl::ValidateBufferBindingPointTarget(bufferTarget)) return;
|
||||||
|
|
||||||
|
auto bufferObject = MG_State::pGLContext->GetBufferObject(buffer);
|
||||||
|
if (!bufferObject) {
|
||||||
|
MG_State::pGLContext->CreateBufferObject(buffer);
|
||||||
|
bufferObject = MG_State::pGLContext->GetBufferObject(buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
auto& point = MG_State::pGLContext->GetBufferBindingPoint(bufferTarget, index);
|
||||||
|
point.Bind(bufferObject);
|
||||||
|
point.SetRange(Range1D(offset, offset + size));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* @INSERTION_POINT:FUNCTION_IMPLEMENTATION@ */
|
/* @INSERTION_POINT:FUNCTION_IMPLEMENTATION@ */
|
||||||
@@ -561,5 +577,9 @@ namespace MobileGL {
|
|||||||
void BindBufferBase(GLenum target, GLuint index, GLuint buffer) {
|
void BindBufferBase(GLenum target, GLuint index, GLuint buffer) {
|
||||||
BindBufferBase_State(target, index, buffer);
|
BindBufferBase_State(target, index, buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) {
|
||||||
|
BindBufferRange_State(target, index, buffer, offset, size);
|
||||||
|
}
|
||||||
} // namespace MG_Impl::GLImpl
|
} // namespace MG_Impl::GLImpl
|
||||||
} // namespace MobileGL
|
} // namespace MobileGL
|
||||||
|
|||||||
@@ -18,5 +18,7 @@ namespace MobileGL {
|
|||||||
void BindBuffer(GLenum target, GLuint buffer);
|
void BindBuffer(GLenum target, GLuint buffer);
|
||||||
void GenBuffers(GLsizei n, GLuint* buffers);
|
void GenBuffers(GLsizei n, GLuint* buffers);
|
||||||
void BindBufferBase(GLenum target, GLuint index, GLuint buffer);
|
void BindBufferBase(GLenum target, GLuint index, GLuint buffer);
|
||||||
|
void BindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
|
||||||
|
|
||||||
} // namespace MG_Impl::GLImpl
|
} // namespace MG_Impl::GLImpl
|
||||||
} // namespace MobileGL
|
} // namespace MobileGL
|
||||||
|
|||||||
@@ -213,7 +213,7 @@ DECLARE_GL_FUNCTION_HEAD(GLboolean, IsVertexArray, GLuint array) DECLARE_GL_FUNC
|
|||||||
DECLARE_GL_FUNCTION_STUB_HEAD(void, GetIntegeri_v, GLenum target, GLuint index, GLint* data) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, GetIntegeri_v, target, index, data)
|
DECLARE_GL_FUNCTION_STUB_HEAD(void, GetIntegeri_v, GLenum target, GLuint index, GLint* data) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, GetIntegeri_v, target, index, data)
|
||||||
DECLARE_GL_FUNCTION_STUB_HEAD(void, BeginTransformFeedback, GLenum primitiveMode) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, BeginTransformFeedback, primitiveMode)
|
DECLARE_GL_FUNCTION_STUB_HEAD(void, BeginTransformFeedback, GLenum primitiveMode) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, BeginTransformFeedback, primitiveMode)
|
||||||
DECLARE_GL_FUNCTION_STUB_HEAD(void, EndTransformFeedback) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, EndTransformFeedback)
|
DECLARE_GL_FUNCTION_STUB_HEAD(void, EndTransformFeedback) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, EndTransformFeedback)
|
||||||
DECLARE_GL_FUNCTION_STUB_HEAD(void, BindBufferRange, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, BindBufferRange, target, index, buffer, offset, size)
|
DECLARE_GL_FUNCTION_HEAD(void, BindBufferRange, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) DECLARE_GL_FUNCTION_END_NO_RETURN(void, BindBufferRange, target, index, buffer, offset, size)
|
||||||
DECLARE_GL_FUNCTION_HEAD(void, BindBufferBase, GLenum target, GLuint index, GLuint buffer) DECLARE_GL_FUNCTION_END_NO_RETURN(void, BindBufferBase, target, index, buffer)
|
DECLARE_GL_FUNCTION_HEAD(void, BindBufferBase, GLenum target, GLuint index, GLuint buffer) DECLARE_GL_FUNCTION_END_NO_RETURN(void, BindBufferBase, target, index, buffer)
|
||||||
DECLARE_GL_FUNCTION_STUB_HEAD(void, TransformFeedbackVaryings, GLuint program, GLsizei count, const GLchar* const* varyings, GLenum bufferMode) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, TransformFeedbackVaryings, program, count, varyings, bufferMode)
|
DECLARE_GL_FUNCTION_STUB_HEAD(void, TransformFeedbackVaryings, GLuint program, GLsizei count, const GLchar* const* varyings, GLenum bufferMode) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, TransformFeedbackVaryings, program, count, varyings, bufferMode)
|
||||||
DECLARE_GL_FUNCTION_STUB_HEAD(void, GetTransformFeedbackVarying, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, GLchar* name) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, GetTransformFeedbackVarying, program, index, bufSize, length, size, type, name)
|
DECLARE_GL_FUNCTION_STUB_HEAD(void, GetTransformFeedbackVarying, GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, GLchar* name) DECLARE_GL_FUNCTION_STUB_END_NO_RETURN(void, GetTransformFeedbackVarying, program, index, bufSize, length, size, type, name)
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ namespace MobileGL {
|
|||||||
return m_bufferObjects.find(index) != m_bufferObjects.end();
|
return m_bufferObjects.find(index) != m_bufferObjects.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
BindingSlot<BufferObject> &
|
BindingSlotRange1D<BufferObject> &
|
||||||
BufferState::GetBindingPoint(BufferTarget target, Uint index) {
|
BufferState::GetBindingPoint(BufferTarget target, Uint index) {
|
||||||
for (SizeT i = 0; i < BufferBindPointTargets.size(); ++i) {
|
for (SizeT i = 0; i < BufferBindPointTargets.size(); ++i) {
|
||||||
if (BufferBindPointTargets[i] == target) {
|
if (BufferBindPointTargets[i] == target) {
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ namespace MobileGL {
|
|||||||
SharedPtr<BufferObject> CreateBufferObject(Uint index);
|
SharedPtr<BufferObject> CreateBufferObject(Uint index);
|
||||||
BindingSlot<BufferObject>& GetBindingSlot(BufferTarget target);
|
BindingSlot<BufferObject>& GetBindingSlot(BufferTarget target);
|
||||||
// For glBindBufferBase / glBindBufferRange
|
// For glBindBufferBase / glBindBufferRange
|
||||||
BindingSlot<BufferObject>& GetBindingPoint(BufferTarget target, Uint index);
|
BindingSlotRange1D<BufferObject>& GetBindingPoint(BufferTarget target, Uint index);
|
||||||
void MarkBufferObjectForDeletion(Uint index);
|
void MarkBufferObjectForDeletion(Uint index);
|
||||||
Bool ValidateName(Uint index) const;
|
Bool ValidateName(Uint index) const;
|
||||||
Bool ValidateBufferObject(Uint index) const;
|
Bool ValidateBufferObject(Uint index) const;
|
||||||
@@ -35,7 +35,7 @@ namespace MobileGL {
|
|||||||
Array<BindingSlot<BufferObject>, GlobalBufferTargets.size()> m_bindingSlots;
|
Array<BindingSlot<BufferObject>, GlobalBufferTargets.size()> m_bindingSlots;
|
||||||
// TODO: query the count somewhere globally?
|
// TODO: query the count somewhere globally?
|
||||||
// For glBindBufferBase / glBindBufferRange
|
// For glBindBufferBase / glBindBufferRange
|
||||||
Array<Array<BindingSlot<BufferObject>, 14>, BufferBindPointTargets.size()> m_bufferBindPointTargets;
|
Array<Array<BindingSlotRange1D<BufferObject>, 14>, BufferBindPointTargets.size()> m_bufferBindPointTargets;
|
||||||
};
|
};
|
||||||
} // namespace GLState
|
} // namespace GLState
|
||||||
} // namespace MG_State
|
} // namespace MG_State
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ namespace MobileGL {
|
|||||||
return m_bufferState.GetBindingSlot(target);
|
return m_bufferState.GetBindingSlot(target);
|
||||||
}
|
}
|
||||||
|
|
||||||
BindingSlot<BufferObject>& GLContext::GetBufferBindingPoint(BufferTarget target, Uint index) {
|
BindingSlotRange1D<BufferObject>& GLContext::GetBufferBindingPoint(BufferTarget target, Uint index) {
|
||||||
return m_bufferState.GetBindingPoint(target, index);
|
return m_bufferState.GetBindingPoint(target, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ namespace MobileGL {
|
|||||||
Vector<Uint> GenBufferNames(Uint number);
|
Vector<Uint> GenBufferNames(Uint number);
|
||||||
SharedPtr<BufferObject> GetBufferObject(Uint index);
|
SharedPtr<BufferObject> GetBufferObject(Uint index);
|
||||||
BindingSlot<BufferObject>& GetBufferBindingSlot(BufferTarget target);
|
BindingSlot<BufferObject>& GetBufferBindingSlot(BufferTarget target);
|
||||||
BindingSlot<BufferObject>& GetBufferBindingPoint(BufferTarget target, Uint index);
|
BindingSlotRange1D<BufferObject>& GetBufferBindingPoint(BufferTarget target, Uint index);
|
||||||
SharedPtr<BufferObject> CreateBufferObject(Uint index);
|
SharedPtr<BufferObject> CreateBufferObject(Uint index);
|
||||||
void MarkBufferObjectForDeletion(Uint index);
|
void MarkBufferObjectForDeletion(Uint index);
|
||||||
Bool ValidateBufferName(Uint index) const;
|
Bool ValidateBufferName(Uint index) const;
|
||||||
|
|||||||
Reference in New Issue
Block a user