How to use Framebuffer:renderTo() properly
Forum rules
Before you make a thread asking for help, read this.
Before you make a thread asking for help, read this.
- TechnoCat
- Inner party member
- Posts: 1611
- Joined: Thu Jul 30, 2009 12:31 am
- Location: Milwaukee, WI
- Contact:
Re: How to use Framebuffer:renderTo() properly
Implementation error I'm guessing?
Re: How to use Framebuffer:renderTo() properly
What video card do you have? might be that you don't actually have framebufferstentus wrote:I did before posting (sorry I didn't mention that). Same result. I could whip up a screenshot if that would help?
Re: How to use Framebuffer:renderTo() properly
In that case the error message should read Not supported by your OpenGL implementation or May not be supported by your OpenGL implementation. The error in implementation error can be caused by a lot of things, but is most of the time because (1) the graphics card did something unexpected or (2) the system's OpenGL implementation is incomplete/wrong. Either way, there is not much one can do about itadrix89 wrote:What video card do you have? might be that you don't actually have framebuffers
- tentus
- Inner party member
- Posts: 1060
- Joined: Sun Oct 31, 2010 7:56 pm
- Location: Appalachia
- Contact:
Re: How to use Framebuffer:renderTo() properly
Like I said, I tested this on my work machine, so video card is practically nonexistent.
I guess I'm just SOL, short of using ImageData:paste as it was never meant to be used?
I guess I'm just SOL, short of using ImageData:paste as it was never meant to be used?
Kurosuke needs beta testers
Re: How to use Framebuffer:renderTo() properly
As it says in the error message: Framebuffers are not supported on your computer. I guess your graphics chip is too old...
- tentus
- Inner party member
- Posts: 1060
- Joined: Sun Oct 31, 2010 7:56 pm
- Location: Appalachia
- Contact:
Re: How to use Framebuffer:renderTo() properly
Huh, I would have thought a Intel(R) 82945G Express Chipset Family would be up to it. I'll do some playing around with drivers, see what I can rig up.
In the meantime, is there a way to test for fb support in love.load, so that we can jump to a more elegant error screen? I hate showing blue screens.
Edit: man, intel's driver distribution is more rubbish than I recall. I know exactly what I want, why won't they give me a link?
In the meantime, is there a way to test for fb support in love.load, so that we can jump to a more elegant error screen? I hate showing blue screens.
Edit: man, intel's driver distribution is more rubbish than I recall. I know exactly what I want, why won't they give me a link?
Kurosuke needs beta testers
Re: How to use Framebuffer:renderTo() properly
The blue screens are just LÖVE's custom way of handling any Lua errors it receives. It's simple enough to intercept the errors before they get to that level, using Lua's built-in pcall and xpcall functions. So you'd probably want something like this:
Code: Select all
fb = pcall(love.graphics.newFramebuffer, scene.width, scene.height)
if not fb then
-- set up your program so that love.draw shows a nicer error screen
else
-- continue doing awesome normal loady things
end
Re: How to use Framebuffer:renderTo() properly
(I know this thread is kind of old, but...)TechnoCat wrote:Now that 0.7.0 is released and framebuffers are window dimension independent.
Here is a framebuffer example. They are very cool.
Code: Select all
function love.load() enabled = false image = love.graphics.newImage("image.png") translate = {x=0, y=0} scene = {} scene.width = 2048 scene.height = 2048 --Iniitialize framebuffer fb = love.graphics.newFramebuffer(scene.width, scene.height) --Create random objects placed everywhere imageSet = {} for i = 1, 10000 do local entry = {} entry.x = math.random(scene.width-128) entry.y = math.random(scene.height-128) imageSet[i] = entry end --Draw them to the framebuffers -- This is my preferable method love.graphics.setRenderTarget(fb) for _,v in ipairs(imageSet) do love.graphics.draw(image, v.x, v.y) end love.graphics.setRenderTarget() --]] --[[ This is the other method fb:renderTo( function() for _,v in ipairs(imageSet) do love.graphics.draw(image, v.x, v.y) end end ) --]] end function love.update(dt) if love.keyboard.isDown("left") then translate.x = translate.x + 1000*dt elseif love.keyboard.isDown("right") then translate.x = translate.x - 1000*dt end if love.keyboard.isDown("up") then translate.y = translate.y + 1000*dt elseif love.keyboard.isDown("down") then translate.y = translate.y - 1000*dt end end function love.draw() love.graphics.push() love.graphics.translate(translate.x, translate.y) if enabled then love.graphics.draw(fb, 0, 0) else for _,v in ipairs(imageSet) do love.graphics.draw(image, v.x, v.y) end end love.graphics.pop() fps = love.timer.getFPS() if enabled then love.graphics.setCaption(fps.." Framebuffer rendering enabled",0,0) else love.graphics.setCaption(fps.." Framebuffer rendering disabled",0,0) end end function love.keypressed(k) if k==" " then enabled = not enabled end end
I've been playing around with this demo (thanks by the way, it's very informative). What I don't understand is why the edges of the images look different depending on whether they're drawn to the frame buffer first or straight to the screen.
When drawn to the frame buffer, the alphas appear to not be blending correctly at the edges. I tried explicitly setting the blend mode to 'alpha' after setting the render target to the frame buffer, but that made no difference.
Here's what I mean:
no framebuffer:
framebuffer:
difference:
Is anyone else seeing this, or is it just me? Anyone know what's going on?
- Robin
- The Omniscient
- Posts: 6506
- Joined: Fri Feb 20, 2009 4:29 pm
- Location: The Netherlands
- Contact:
Re: How to use Framebuffer:renderTo() properly
Yeah, I get the same. No idea why, but there you have it.
Help us help you: attach a .love.
- Jasoco
- Inner party member
- Posts: 3726
- Joined: Mon Jun 22, 2009 9:35 am
- Location: Pennsylvania, USA
- Contact:
Re: How to use Framebuffer:renderTo() properly
What color is the background? As I've mentioned before and have had a discussion about the inability for Löve to do it, but this would not be a problem if FrameBuffers could support alpha transparency. The edges around those circles are because FB's can't do alpha. Only solid or transparent like a GIF. Not alpha like a PNG. Sucks. But I'm more a 16-bit homage person so none of my graphics really have alpha edges.
Who is online
Users browsing this forum: Bing [Bot], Google [Bot] and 1 guest