#include <cmath>
#include <msp/gbase/image.h>
+#include "bindable.h"
#include "except.h"
#include "extension.h"
#include "texture3d.h"
namespace GL {
Texture3D::Texture3D():
+ Texture(GL_TEXTURE_3D),
width(0),
height(0),
depth(0)
{
- static RequireVersion _ver(1, 3);
-
- target = GL_TEXTURE_3D;
- bind();
+ static RequireVersion _ver(1, 2);
}
void Texture3D::storage(PixelFormat f, unsigned w, unsigned h, unsigned d, int b)
{
if(width>0)
- throw InvalidState("Textures may only be created once");
+ throw InvalidState("Textures storage may only be specified once");
if(w==0 || h==0 || d==0)
throw InvalidParameterValue("Invalid texture dimensions");
void Texture3D::image(int level, PixelFormat fmt, DataType type, const void *data)
{
- maybe_bind();
+ if(width==0)
+ throw InvalidState("Texture storage has not been specified");
+
+ Bind _bind(this, true);
glTexImage3D(target, level, ifmt, width, height, depth, border, fmt, type, data);
}