mirror of
https://github.com/love2d/love.git
synced 2026-08-17 19:23:38 +02:00
Added first review of vrld's FBO patch
This commit is contained in:
@@ -52,6 +52,7 @@ namespace love
|
|||||||
GRAPHICS_PARTICLE_SYSTEM_ID,
|
GRAPHICS_PARTICLE_SYSTEM_ID,
|
||||||
GRAPHICS_SPRITE_BATCH_ID,
|
GRAPHICS_SPRITE_BATCH_ID,
|
||||||
GRAPHICS_VERTEX_BUFFER_ID,
|
GRAPHICS_VERTEX_BUFFER_ID,
|
||||||
|
GRAPHICS_FBO_ID,
|
||||||
|
|
||||||
// Image
|
// Image
|
||||||
IMAGE_IMAGE_DATA_ID,
|
IMAGE_IMAGE_DATA_ID,
|
||||||
@@ -116,6 +117,7 @@ namespace love
|
|||||||
const bits GRAPHICS_PARTICLE_SYSTEM_T = (bits(1) << GRAPHICS_PARTICLE_SYSTEM_ID) | GRAPHICS_DRAWABLE_T;
|
const bits GRAPHICS_PARTICLE_SYSTEM_T = (bits(1) << GRAPHICS_PARTICLE_SYSTEM_ID) | GRAPHICS_DRAWABLE_T;
|
||||||
const bits GRAPHICS_SPRITE_BATCH_T = (bits(1) << GRAPHICS_SPRITE_BATCH_ID) | GRAPHICS_DRAWABLE_T;
|
const bits GRAPHICS_SPRITE_BATCH_T = (bits(1) << GRAPHICS_SPRITE_BATCH_ID) | GRAPHICS_DRAWABLE_T;
|
||||||
const bits GRAPHICS_VERTEX_BUFFER_T = (bits(1) << GRAPHICS_VERTEX_BUFFER_ID) | GRAPHICS_DRAWABLE_T;
|
const bits GRAPHICS_VERTEX_BUFFER_T = (bits(1) << GRAPHICS_VERTEX_BUFFER_ID) | GRAPHICS_DRAWABLE_T;
|
||||||
|
const bits GRAPHICS_FBO_T = (bits(1) << GRAPHICS_FBO_ID) | GRAPHICS_DRAWABLE_T;
|
||||||
|
|
||||||
// Image.
|
// Image.
|
||||||
const bits IMAGE_IMAGE_DATA_T = (bits(1) << IMAGE_IMAGE_DATA_ID) | DATA_T;
|
const bits IMAGE_IMAGE_DATA_T = (bits(1) << IMAGE_IMAGE_DATA_ID) | DATA_T;
|
||||||
|
|||||||
@@ -0,0 +1,103 @@
|
|||||||
|
#include "Fbo.h"
|
||||||
|
#include <common/Matrix.h>
|
||||||
|
|
||||||
|
namespace love
|
||||||
|
{
|
||||||
|
namespace graphics
|
||||||
|
{
|
||||||
|
namespace opengl
|
||||||
|
{
|
||||||
|
|
||||||
|
Fbo::Fbo(int width, int height) :
|
||||||
|
width(width), height(height)
|
||||||
|
{
|
||||||
|
// world coordinates
|
||||||
|
vertices[0].x = 0; vertices[0].y = 0;
|
||||||
|
vertices[1].x = 0; vertices[1].y = height;
|
||||||
|
vertices[2].x = width; vertices[2].y = height;
|
||||||
|
vertices[3].x = width; vertices[3].y = 0;
|
||||||
|
|
||||||
|
// texture coordinates
|
||||||
|
vertices[0].s = 0; vertices[0].t = 1;
|
||||||
|
vertices[1].s = 0; vertices[1].t = 0;
|
||||||
|
vertices[2].s = 1; vertices[2].t = 0;
|
||||||
|
vertices[3].s = 1; vertices[3].t = 1;
|
||||||
|
|
||||||
|
// generate depth buffer
|
||||||
|
glGenRenderbuffers(1, &depthbuffer);
|
||||||
|
glBindRenderbuffer(GL_RENDERBUFFER, depthbuffer);
|
||||||
|
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, width, height);
|
||||||
|
glBindRenderbuffer(GL_RENDERBUFFER, 0);
|
||||||
|
|
||||||
|
// generate texture save target
|
||||||
|
glGenTextures(1, &img);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, img);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height,
|
||||||
|
0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
|
|
||||||
|
// create framebuffer
|
||||||
|
glGenFramebuffers(1, &fbo);
|
||||||
|
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
|
||||||
|
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
|
||||||
|
GL_TEXTURE_2D, img, 0);
|
||||||
|
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
|
||||||
|
GL_RENDERBUFFER, depthbuffer);
|
||||||
|
status_ = glCheckFramebufferStatus(GL_FRAMEBUFFER);
|
||||||
|
|
||||||
|
// unbind buffers and texture
|
||||||
|
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
Fbo::~Fbo()
|
||||||
|
{
|
||||||
|
glDeleteTextures(1, &fbo);
|
||||||
|
glDeleteRenderbuffers(1, &depthbuffer);
|
||||||
|
glDeleteFramebuffers(1, &img);
|
||||||
|
}
|
||||||
|
|
||||||
|
GLenum Fbo::status() const
|
||||||
|
{
|
||||||
|
return status_;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Fbo::bind()
|
||||||
|
{
|
||||||
|
glPushAttrib(GL_VIEWPORT_BIT | GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
glViewport(0, 0, width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Fbo::unbind()
|
||||||
|
{
|
||||||
|
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||||
|
glPopAttrib();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Fbo::draw(float x, float y, float angle, float sx, float sy, float ox, float oy) const
|
||||||
|
{
|
||||||
|
static Matrix t;
|
||||||
|
t.setTransformation(x, y, angle, sx, sy, ox, oy);
|
||||||
|
|
||||||
|
glPushMatrix();
|
||||||
|
glMultMatrixf((const GLfloat*)t.getElements());
|
||||||
|
|
||||||
|
glBindTexture(GL_TEXTURE_2D, img);
|
||||||
|
|
||||||
|
glEnableClientState(GL_VERTEX_ARRAY);
|
||||||
|
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||||
|
glVertexPointer(2, GL_FLOAT, sizeof(vertex), (GLvoid*)&vertices[0].x);
|
||||||
|
glTexCoordPointer(2, GL_FLOAT, sizeof(vertex), (GLvoid*)&vertices[0].s);
|
||||||
|
glDrawArrays(GL_QUADS, 0, 4);
|
||||||
|
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||||
|
glDisableClientState(GL_VERTEX_ARRAY);
|
||||||
|
|
||||||
|
glPopMatrix();
|
||||||
|
}
|
||||||
|
|
||||||
|
} // opengl
|
||||||
|
} // graphics
|
||||||
|
} // love
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
#ifndef LOVE_GRAPHICS_FBO_H
|
||||||
|
#define LOVE_GRAPHICS_FBO_H
|
||||||
|
|
||||||
|
#include <graphics/Drawable.h>
|
||||||
|
#include <graphics/Volatile.h>
|
||||||
|
#include <common/math.h>
|
||||||
|
#include "GLee.h"
|
||||||
|
|
||||||
|
namespace love
|
||||||
|
{
|
||||||
|
namespace graphics
|
||||||
|
{
|
||||||
|
namespace opengl
|
||||||
|
{
|
||||||
|
|
||||||
|
class Fbo : public Drawable // Fbo vs. FBO?
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Fbo(int width, int height);
|
||||||
|
virtual ~Fbo();
|
||||||
|
|
||||||
|
GLenum status() const; //SERIOUS DISLIKE HERE
|
||||||
|
|
||||||
|
void bind(); //DOUBTFUL ABOUT NAME
|
||||||
|
void unbind(); //Maybe start/stop?
|
||||||
|
//And what about clearing, clear() isn't entirely what I want either
|
||||||
|
//maybe make bind/start autoclear?
|
||||||
|
|
||||||
|
virtual void draw(float x, float y, float angle, float sx, float sy, float ox, float oy) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
GLsizei width;
|
||||||
|
GLsizei height;
|
||||||
|
GLuint fbo;
|
||||||
|
GLuint depthbuffer;
|
||||||
|
GLuint img;
|
||||||
|
GLenum status_;
|
||||||
|
|
||||||
|
vertex vertices[4];
|
||||||
|
};
|
||||||
|
|
||||||
|
} // opengl
|
||||||
|
} // graphics
|
||||||
|
} // love
|
||||||
|
|
||||||
|
#endif // LOVE_GRAPHICS_FBO_H
|
||||||
@@ -306,7 +306,7 @@ namespace opengl
|
|||||||
{
|
{
|
||||||
SDL_GL_SwapBuffers();
|
SDL_GL_SwapBuffers();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Graphics::setIcon(Image * image)
|
void Graphics::setIcon(Image * image)
|
||||||
{
|
{
|
||||||
Uint32 rmask, gmask, bmask, amask;
|
Uint32 rmask, gmask, bmask, amask;
|
||||||
@@ -470,6 +470,11 @@ namespace opengl
|
|||||||
return new ParticleSystem(image, size);
|
return new ParticleSystem(image, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Fbo * Graphics::newFbo(int width, int height)
|
||||||
|
{
|
||||||
|
return new Fbo(width, height);
|
||||||
|
}
|
||||||
|
|
||||||
void Graphics::setColor(Color c)
|
void Graphics::setColor(Color c)
|
||||||
{
|
{
|
||||||
glColor4ubv(&c.r);
|
glColor4ubv(&c.r);
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2006-2010 LOVE Development Team
|
* Copyright (c) 2006-2010 LOVE Development Team
|
||||||
*
|
*
|
||||||
* This software is provided 'as-is', without any express or implied
|
* This software is provided 'as-is', without any express or implied
|
||||||
* warranty. In no event will the authors be held liable for any damages
|
* warranty. In no event will the authors be held liable for any damages
|
||||||
* arising from the use of this software.
|
* arising from the use of this software.
|
||||||
*
|
*
|
||||||
* Permission is granted to anyone to use this software for any purpose,
|
* Permission is granted to anyone to use this software for any purpose,
|
||||||
* including commercial applications, and to alter it and redistribute it
|
* including commercial applications, and to alter it and redistribute it
|
||||||
* freely, subject to the following restrictions:
|
* freely, subject to the following restrictions:
|
||||||
*
|
*
|
||||||
* 1. The origin of this software must not be misrepresented; you must not
|
* 1. The origin of this software must not be misrepresented; you must not
|
||||||
* claim that you wrote the original software. If you use this software
|
* claim that you wrote the original software. If you use this software
|
||||||
* in a product, an acknowledgment in the product documentation would be
|
* in a product, an acknowledgment in the product documentation would be
|
||||||
@@ -43,6 +43,7 @@
|
|||||||
#include "Quad.h"
|
#include "Quad.h"
|
||||||
#include "SpriteBatch.h"
|
#include "SpriteBatch.h"
|
||||||
#include "ParticleSystem.h"
|
#include "ParticleSystem.h"
|
||||||
|
#include "Fbo.h"
|
||||||
|
|
||||||
namespace love
|
namespace love
|
||||||
{
|
{
|
||||||
@@ -95,13 +96,13 @@ namespace opengl
|
|||||||
// Default values.
|
// Default values.
|
||||||
DisplayState()
|
DisplayState()
|
||||||
{
|
{
|
||||||
color.r = 255;
|
color.r = 255;
|
||||||
color.g = 255;
|
color.g = 255;
|
||||||
color.b = 255;
|
color.b = 255;
|
||||||
color.a = 255;
|
color.a = 255;
|
||||||
backgroundColor.r = 0;
|
backgroundColor.r = 0;
|
||||||
backgroundColor.g = 0;
|
backgroundColor.g = 0;
|
||||||
backgroundColor.b = 0;
|
backgroundColor.b = 0;
|
||||||
backgroundColor.a = 255;
|
backgroundColor.a = 255;
|
||||||
blendMode = Graphics::BLEND_ALPHA;
|
blendMode = Graphics::BLEND_ALPHA;
|
||||||
colorMode = Graphics::COLOR_MODULATE;
|
colorMode = Graphics::COLOR_MODULATE;
|
||||||
@@ -126,7 +127,7 @@ namespace opengl
|
|||||||
|
|
||||||
Graphics();
|
Graphics();
|
||||||
virtual ~Graphics();
|
virtual ~Graphics();
|
||||||
|
|
||||||
// Implements Module.
|
// Implements Module.
|
||||||
const char * getName() const;
|
const char * getName() const;
|
||||||
|
|
||||||
@@ -165,18 +166,18 @@ namespace opengl
|
|||||||
* when the game reloads.
|
* when the game reloads.
|
||||||
**/
|
**/
|
||||||
void reset();
|
void reset();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clears the screen.
|
* Clears the screen.
|
||||||
**/
|
**/
|
||||||
void clear();
|
void clear();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Flips buffers. (Rendered geometry is
|
* Flips buffers. (Rendered geometry is
|
||||||
* presented on screen).
|
* presented on screen).
|
||||||
**/
|
**/
|
||||||
void present();
|
void present();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the window's icon.
|
* Sets the window's icon.
|
||||||
**/
|
**/
|
||||||
@@ -207,13 +208,13 @@ namespace opengl
|
|||||||
/**
|
/**
|
||||||
* This native Lua function gets available modes
|
* This native Lua function gets available modes
|
||||||
* from SDL and returns them as a table on the following format:
|
* from SDL and returns them as a table on the following format:
|
||||||
*
|
*
|
||||||
* {
|
* {
|
||||||
* { width = 800, height = 600 },
|
* { width = 800, height = 600 },
|
||||||
* { width = 1024, height = 768 },
|
* { width = 1024, height = 768 },
|
||||||
* ...
|
* ...
|
||||||
* }
|
* }
|
||||||
*
|
*
|
||||||
* Only fullscreen modes are returned here, as all
|
* Only fullscreen modes are returned here, as all
|
||||||
* window sizes are supported (normally).
|
* window sizes are supported (normally).
|
||||||
**/
|
**/
|
||||||
@@ -245,7 +246,7 @@ namespace opengl
|
|||||||
**/
|
**/
|
||||||
Image * newImage(love::filesystem::File * file);
|
Image * newImage(love::filesystem::File * file);
|
||||||
Image * newImage(love::image::ImageData * data);
|
Image * newImage(love::image::ImageData * data);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a Frame
|
* Creates a Frame
|
||||||
**/
|
**/
|
||||||
@@ -255,11 +256,13 @@ namespace opengl
|
|||||||
* Creates a Font object.
|
* Creates a Font object.
|
||||||
**/
|
**/
|
||||||
Font * newFont(love::font::FontData * data);
|
Font * newFont(love::font::FontData * data);
|
||||||
|
|
||||||
SpriteBatch * newSpriteBatch(Image * image, int size, int usage);
|
SpriteBatch * newSpriteBatch(Image * image, int size, int usage);
|
||||||
|
|
||||||
ParticleSystem * newParticleSystem(Image * image, int size);
|
ParticleSystem * newParticleSystem(Image * image, int size);
|
||||||
|
|
||||||
|
Fbo * newFbo(int width, int height);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the foreground color.
|
* Sets the foreground color.
|
||||||
**/
|
**/
|
||||||
@@ -271,7 +274,7 @@ namespace opengl
|
|||||||
Color getColor();
|
Color getColor();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the background Color.
|
* Sets the background Color.
|
||||||
**/
|
**/
|
||||||
void setBackgroundColor(Color c);
|
void setBackgroundColor(Color c);
|
||||||
|
|
||||||
@@ -383,7 +386,7 @@ namespace opengl
|
|||||||
PointStyle getPointStyle();
|
PointStyle getPointStyle();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the maximum point size supported.
|
* Gets the maximum point size supported.
|
||||||
* This may vary from computer to computer.
|
* This may vary from computer to computer.
|
||||||
**/
|
**/
|
||||||
int getMaxPointSize();
|
int getMaxPointSize();
|
||||||
@@ -406,7 +409,7 @@ namespace opengl
|
|||||||
void print(const char * str, float x, float y , float angle);
|
void print(const char * str, float x, float y , float angle);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Draws text at the specified coordinates, with rotation and
|
* Draws text at the specified coordinates, with rotation and
|
||||||
* scaling.
|
* scaling.
|
||||||
* @param x The x-coordinate.
|
* @param x The x-coordinate.
|
||||||
* @param y The y-coordinate.
|
* @param y The y-coordinate.
|
||||||
@@ -416,7 +419,7 @@ namespace opengl
|
|||||||
void print(const char * str, float x, float y , float angle, float s);
|
void print(const char * str, float x, float y , float angle, float s);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Draws text at the specified coordinates, with rotation and
|
* Draws text at the specified coordinates, with rotation and
|
||||||
* scaling along both axes.
|
* scaling along both axes.
|
||||||
* @param x The x-coordinate.
|
* @param x The x-coordinate.
|
||||||
* @param y The y-coordinate.
|
* @param y The y-coordinate.
|
||||||
@@ -452,7 +455,7 @@ namespace opengl
|
|||||||
* @param y2 Second y-coordinate.
|
* @param y2 Second y-coordinate.
|
||||||
**/
|
**/
|
||||||
void line(float x1, float y1, float x2, float y2);
|
void line(float x1, float y1, float x2, float y2);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Draws a series of lines connecting the given vertices.
|
* Draws a series of lines connecting the given vertices.
|
||||||
* @param ... Vertex components (x1, y1, x2, y2, etc.)
|
* @param ... Vertex components (x1, y1, x2, y2, etc.)
|
||||||
|
|||||||
@@ -0,0 +1,58 @@
|
|||||||
|
#include "wrap_Fbo.h"
|
||||||
|
|
||||||
|
namespace love
|
||||||
|
{
|
||||||
|
namespace graphics
|
||||||
|
{
|
||||||
|
namespace opengl
|
||||||
|
{
|
||||||
|
Fbo * luax_checkfbo(lua_State * L, int idx)
|
||||||
|
{
|
||||||
|
return luax_checktype<Fbo>(L, idx, "Fbo", GRAPHICS_FBO_T);
|
||||||
|
}
|
||||||
|
|
||||||
|
int w_Fbo_render(lua_State * L)
|
||||||
|
{
|
||||||
|
Fbo * fbo = luax_checkfbo(L, 1);
|
||||||
|
if (!lua_isfunction(L, 2))
|
||||||
|
return luaL_error(L, "Need a function to render to fbo");
|
||||||
|
|
||||||
|
fbo->bind();
|
||||||
|
|
||||||
|
lua_settop(L, 2); // make sure the function is on top of the stack
|
||||||
|
lua_pcall(L, 0, 0, 0);
|
||||||
|
|
||||||
|
fbo->unbind();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int w_Fbo_bind(lua_State * L)
|
||||||
|
{
|
||||||
|
Fbo * fbo = luax_checkfbo(L, 1);
|
||||||
|
fbo->bind();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int w_Fbo_unbind(lua_State * L)
|
||||||
|
{
|
||||||
|
Fbo * fbo = luax_checkfbo(L, 1);
|
||||||
|
fbo->unbind();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const luaL_Reg functions[] = {
|
||||||
|
{ "render", w_Fbo_render },
|
||||||
|
{ "bind", w_Fbo_bind },
|
||||||
|
{ "unbind", w_Fbo_unbind },
|
||||||
|
{ 0, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
|
int luaopen_fbo(lua_State * L)
|
||||||
|
{
|
||||||
|
return luax_register_type(L, "Fbo", functions);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // opengl
|
||||||
|
} // graphics
|
||||||
|
} // love
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
#ifndef LOVE_GRAPHICS_OPENGL_WRAP_FBO_H
|
||||||
|
#define LOVE_GRAPHICS_OPENGL_WRAP_FBO_H
|
||||||
|
|
||||||
|
// LOVE
|
||||||
|
#include <common/runtime.h>
|
||||||
|
#include "Fbo.h"
|
||||||
|
|
||||||
|
namespace love
|
||||||
|
{
|
||||||
|
namespace graphics
|
||||||
|
{
|
||||||
|
namespace opengl
|
||||||
|
{
|
||||||
|
//see Fbo.h
|
||||||
|
Fbo * luax_checkfbo(lua_State * L, int idx);
|
||||||
|
int w_Fbo_render(lua_State * L);
|
||||||
|
int w_Fbo_bind(lua_State * L);
|
||||||
|
int w_Fbo_unbind(lua_State * L);
|
||||||
|
int luaopen_fbo(lua_State * L);
|
||||||
|
|
||||||
|
} // opengl
|
||||||
|
} // graphics
|
||||||
|
} // love
|
||||||
|
|
||||||
|
#endif // LOVE_GRAPHICS_OPENGL_WRAP_FBO_H
|
||||||
@@ -84,7 +84,7 @@ namespace opengl
|
|||||||
instance->setIcon(image);
|
instance->setIcon(image);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int w_setCaption(lua_State * L)
|
int w_setCaption(lua_State * L)
|
||||||
{
|
{
|
||||||
const char * str = luaL_checkstring(L, 1);
|
const char * str = luaL_checkstring(L, 1);
|
||||||
@@ -292,6 +292,21 @@ namespace opengl
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int w_newFbo(lua_State * L)
|
||||||
|
{
|
||||||
|
int width, height;
|
||||||
|
width = luaL_checkint(L, 1);
|
||||||
|
height = luaL_checkint(L, 2);
|
||||||
|
Fbo * fbo = instance->newFbo(width, height);
|
||||||
|
|
||||||
|
//and there we go with the status... still disliked
|
||||||
|
GLenum status = fbo->status();
|
||||||
|
if (status != GL_FRAMEBUFFER_COMPLETE_EXT)
|
||||||
|
return luaL_error(L, "Cannot create FBO: %d", status);
|
||||||
|
luax_newtype(L, "Fbo", GRAPHICS_FBO_T, (void*)fbo);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
int w_setColor(lua_State * L)
|
int w_setColor(lua_State * L)
|
||||||
{
|
{
|
||||||
Color c;
|
Color c;
|
||||||
@@ -829,6 +844,7 @@ namespace opengl
|
|||||||
{ "newImageFont", w_newImageFont },
|
{ "newImageFont", w_newImageFont },
|
||||||
{ "newSpriteBatch", w_newSpriteBatch },
|
{ "newSpriteBatch", w_newSpriteBatch },
|
||||||
{ "newParticleSystem", w_newParticleSystem },
|
{ "newParticleSystem", w_newParticleSystem },
|
||||||
|
{ "newFbo", w_newFbo },
|
||||||
|
|
||||||
{ "setColor", w_setColor },
|
{ "setColor", w_setColor },
|
||||||
{ "getColor", w_getColor },
|
{ "getColor", w_getColor },
|
||||||
@@ -866,7 +882,7 @@ namespace opengl
|
|||||||
|
|
||||||
{ "setCaption", w_setCaption },
|
{ "setCaption", w_setCaption },
|
||||||
{ "getCaption", w_getCaption },
|
{ "getCaption", w_getCaption },
|
||||||
|
|
||||||
{ "setIcon", w_setIcon },
|
{ "setIcon", w_setIcon },
|
||||||
|
|
||||||
{ "getWidth", w_getWidth },
|
{ "getWidth", w_getWidth },
|
||||||
@@ -906,6 +922,7 @@ namespace opengl
|
|||||||
luaopen_frame,
|
luaopen_frame,
|
||||||
luaopen_spritebatch,
|
luaopen_spritebatch,
|
||||||
luaopen_particlesystem,
|
luaopen_particlesystem,
|
||||||
|
luaopen_fbo,
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (c) 2006-2010 LOVE Development Team
|
* Copyright (c) 2006-2010 LOVE Development Team
|
||||||
*
|
*
|
||||||
* This software is provided 'as-is', without any express or implied
|
* This software is provided 'as-is', without any express or implied
|
||||||
* warranty. In no event will the authors be held liable for any damages
|
* warranty. In no event will the authors be held liable for any damages
|
||||||
* arising from the use of this software.
|
* arising from the use of this software.
|
||||||
*
|
*
|
||||||
* Permission is granted to anyone to use this software for any purpose,
|
* Permission is granted to anyone to use this software for any purpose,
|
||||||
* including commercial applications, and to alter it and redistribute it
|
* including commercial applications, and to alter it and redistribute it
|
||||||
* freely, subject to the following restrictions:
|
* freely, subject to the following restrictions:
|
||||||
*
|
*
|
||||||
* 1. The origin of this software must not be misrepresented; you must not
|
* 1. The origin of this software must not be misrepresented; you must not
|
||||||
* claim that you wrote the original software. If you use this software
|
* claim that you wrote the original software. If you use this software
|
||||||
* in a product, an acknowledgment in the product documentation would be
|
* in a product, an acknowledgment in the product documentation would be
|
||||||
@@ -28,6 +28,7 @@
|
|||||||
#include "wrap_Quad.h"
|
#include "wrap_Quad.h"
|
||||||
#include "wrap_SpriteBatch.h"
|
#include "wrap_SpriteBatch.h"
|
||||||
#include "wrap_ParticleSystem.h"
|
#include "wrap_ParticleSystem.h"
|
||||||
|
#include "wrap_Fbo.h"
|
||||||
#include "Graphics.h"
|
#include "Graphics.h"
|
||||||
|
|
||||||
namespace love
|
namespace love
|
||||||
@@ -58,6 +59,7 @@ namespace opengl
|
|||||||
int w_newImageFont(lua_State * L);
|
int w_newImageFont(lua_State * L);
|
||||||
int w_newSpriteBatch(lua_State * L);
|
int w_newSpriteBatch(lua_State * L);
|
||||||
int w_newParticleSystem(lua_State * L);
|
int w_newParticleSystem(lua_State * L);
|
||||||
|
int w_newFbo(lua_State * L); // commetns in function
|
||||||
int w_setColor(lua_State * L);
|
int w_setColor(lua_State * L);
|
||||||
int w_getColor(lua_State * L);
|
int w_getColor(lua_State * L);
|
||||||
int w_setBackgroundColor(lua_State * L);
|
int w_setBackgroundColor(lua_State * L);
|
||||||
|
|||||||
Reference in New Issue
Block a user