Add exception handling to Attributes::bind, add default constructor to Model
This commit is contained in:
parent
cdd01672c3
commit
89fbe359f6
|
@ -79,8 +79,31 @@ std::size_t sb::Attributes::size() const
|
||||||
|
|
||||||
void sb::Attributes::bind(const std::string& name, GLuint program)
|
void sb::Attributes::bind(const std::string& name, GLuint program)
|
||||||
{
|
{
|
||||||
index(glGetAttribLocation(program, name.c_str()));
|
GLint index = glGetAttribLocation(program, name.c_str());
|
||||||
glVertexAttribPointer(index(), dimensions(), type(), normalized(), 0, reinterpret_cast<GLvoid*>(_offset));
|
|
||||||
|
/* A return value of -1 indicates an error finding the given attribute name */
|
||||||
|
if (index == -1)
|
||||||
|
{
|
||||||
|
std::ostringstream message;
|
||||||
|
message << "Error getting attribute location of \"" << name << "\" in shader program. Did the program compile?" <<
|
||||||
|
" Is the attribute present and not optimized out?";
|
||||||
|
throw std::runtime_error(message.str());
|
||||||
|
}
|
||||||
|
|
||||||
|
this->index(index);
|
||||||
|
|
||||||
|
/* Debug */
|
||||||
|
std::ostringstream message;
|
||||||
|
message << "After getting attribute location of " << name;
|
||||||
|
sb::Log::gl_errors(message.str());
|
||||||
|
|
||||||
|
/* Define an array of vertex attributes that have data stored at the specified offset. */
|
||||||
|
glVertexAttribPointer(this->index(), dimensions(), type(), normalized(), 0, reinterpret_cast<GLvoid*>(_offset));
|
||||||
|
|
||||||
|
/* Debug */
|
||||||
|
message = std::ostringstream();
|
||||||
|
message << "After binding " << *this << " to " << name;
|
||||||
|
sb::Log::gl_errors(message.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void sb::Attributes::enable() const
|
void sb::Attributes::enable() const
|
||||||
|
|
|
@ -1,14 +1,12 @@
|
||||||
/* /\ +--------------------------------------------------------------+
|
/* +------------------------------------------------------+
|
||||||
____/ \____ /| - zlib/MIT/Unlicenced game framework licensed to freely use, |
|
____/ \____ /| - Open source game framework licensed to freely use, |
|
||||||
\ / / | copy, and modify without restriction |
|
\ / / | copy, modify and sell without restriction |
|
||||||
+--\ ^__^ /--+ | |
|
+--\ ^__^ /--+ | |
|
||||||
| ~/ \~ | | - originally created at [http://nugget.fun] |
|
| ~/ \~ | | - created for <https://foam.shampoo.ooo> |
|
||||||
| ~~~~~~~~~~~~ | +--------------------------------------------------------------+
|
| ~~~~~~~~~~~~ | +------------------------------------------------------+
|
||||||
| SPACE ~~~~~ | /
|
| SPACE ~~~~~ | /
|
||||||
| ~~~~~~~ BOX |/
|
| ~~~~~~~ BOX |/
|
||||||
+--------------+
|
+-------------*/
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "GLObject.hpp"
|
#include "GLObject.hpp"
|
||||||
using namespace sb;
|
using namespace sb;
|
||||||
|
|
|
@ -1,29 +1,28 @@
|
||||||
/* /\ +--------------------------------------------------------------+
|
/* +------------------------------------------------------+
|
||||||
____/ \____ /| - zlib/MIT/Unlicenced game framework licensed to freely use, |
|
____/ \____ /| - Open source game framework licensed to freely use, |
|
||||||
\ / / | copy, modify and sell without restriction |
|
\ / / | copy, modify and sell without restriction |
|
||||||
+--\ ^__^ /--+ | |
|
+--\ ^__^ /--+ | |
|
||||||
| ~/ \~ | | - originally created at [http://nugget.fun] |
|
| ~/ \~ | | - created for <https://foam.shampoo.ooo> |
|
||||||
| ~~~~~~~~~~~~ | +--------------------------------------------------------------+
|
| ~~~~~~~~~~~~ | +------------------------------------------------------+
|
||||||
| SPACE ~~~~~ | /
|
| SPACE ~~~~~ | /
|
||||||
| ~~~~~~~ BOX |/
|
| ~~~~~~~ BOX |/
|
||||||
+--------------+
|
+--------------+
|
||||||
|
|
||||||
[GLObject.hpp]
|
The abstract GLObject class is meant to be inherited and implemented by more specific
|
||||||
|
types of OpenGL objects, for example Textures or Buffer objects. It stores the object's
|
||||||
|
ID and declares virtual functions for generating, binding, and destroying the object for
|
||||||
|
the derivative class to implement.
|
||||||
|
|
||||||
The abstract GLObject class is meant to be inherited and implemented by more specific
|
An appropriate deleter function must be passed in to the constructor from the derived
|
||||||
types of OpenGL objects, for example Textures or Buffer objects. It stores the object's
|
class. It can be a custom function, or it can be one of the GL deleter functions like
|
||||||
ID and declares virtual functions for generating, binding, and destroying the object.
|
glDeleteTextures.
|
||||||
|
|
||||||
An appropriate deleter function must be passed in to the constructor from the derived
|
A VAO class and a general Buffer class are also defined here. The VAO class just fills
|
||||||
class. It can be a custom function, or it can be one of the GL deleter functions like
|
in the abstract methods of the GLObject class and doesn't have any further SPACE BOX
|
||||||
glDeleteTextures.
|
specific implementation. The buffer class is probably most useful being inherited by a
|
||||||
|
derived class that implements a more specific type of buffer that passes its target to
|
||||||
|
the base class, like the VBO class.
|
||||||
|
|
||||||
A VAO class and a general Buffer class are also defined here. The VAO class just fills
|
|
||||||
in the abstract methods of the GLObject class and doesn't have any further Space Box
|
|
||||||
specific implementation. The buffer class is probably most useful being inherited by a
|
|
||||||
derived class that implements a more specific type of buffer that passes its target to
|
|
||||||
the base class, like the VBO class.
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
|
@ -48,7 +48,7 @@ namespace sb
|
||||||
/*!
|
/*!
|
||||||
* Construct a sb::Model object with no attributes or textures.
|
* Construct a sb::Model object with no attributes or textures.
|
||||||
*/
|
*/
|
||||||
Model();
|
Model() {};
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Construct a sb::Model, adding sb::Attributes each already wrapped in a shared pointer. The attributes should be passed
|
* Construct a sb::Model, adding sb::Attributes each already wrapped in a shared pointer. The attributes should be passed
|
||||||
|
|
|
@ -23,6 +23,7 @@ VBO::VBO() : Buffer(GL_ARRAY_BUFFER) {}
|
||||||
void VBO::allocate(GLsizeiptr size, GLenum usage)
|
void VBO::allocate(GLsizeiptr size, GLenum usage)
|
||||||
{
|
{
|
||||||
glBufferData(target(), size, nullptr, usage);
|
glBufferData(target(), size, nullptr, usage);
|
||||||
|
|
||||||
/* Debug */
|
/* Debug */
|
||||||
std::ostringstream message;
|
std::ostringstream message;
|
||||||
message << "After allocating memory for " << *this;
|
message << "After allocating memory for " << *this;
|
||||||
|
@ -37,7 +38,7 @@ GLintptr VBO::add(sb::Attributes& attributes)
|
||||||
|
|
||||||
/* Debug */
|
/* Debug */
|
||||||
std::ostringstream initialization_message;
|
std::ostringstream initialization_message;
|
||||||
initialization_message << "After setting " << attributes.size() << "bytes in " << *this;
|
initialization_message << "After setting " << attributes.size() << " bytes in " << *this;
|
||||||
sb::Log::gl_errors(initialization_message.str());
|
sb::Log::gl_errors(initialization_message.str());
|
||||||
|
|
||||||
/* Increase offset and return */
|
/* Increase offset and return */
|
||||||
|
|
Loading…
Reference in New Issue