Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - jungletoe

#1
What would be the best way to make a friends list using TGUI objects? We need interactable buttons for each name.

This is the design:
#2
I find it a bit odd that it registers two clicks on buttons both when you release AND initially press the mouse button. Is there any reason for it/any way to stop it from doing this?
#3
Feature requests / Re: RenderTexture support?
17 August 2013, 20:13:15
Quote from: texus on 17 August 2013, 11:57:55
I found the issue.

You were linking to the static sfml libraries, but to the dynamic tgui libraries. This isn't possible (because tgui uses the SFML_STATIC as well). I am very surprised that this is even possible, I would have expected tons of errors or warnings in this situation.

So if you link to tgui-s.lib instead of tgui.lib then the problem should go away.

Haha ok, that's really weird. Thanks for your time :)
#4
Feature requests / Re: RenderTexture support?
17 August 2013, 00:45:49
By the way, I should mention that in my client I ran for my game, it didn't just draw the whole RenderTexture for all of the buttons/elements (tgui::Picture doesnt work as well), it drew the sources. So if I spliced up a frame within a PNG image, the whole PNG would show, not just the parts I selected. You can see this happen in the first picture I posted with tileset.png
#5
Feature requests / Re: RenderTexture support?
17 August 2013, 00:33:23
Ok awesome.
#6
Feature requests / Re: RenderTexture support?
17 August 2013, 00:08:42
Awesome. Sounds like progress :)
#7
Feature requests / Re: RenderTexture support?
16 August 2013, 23:40:40
Quote from: texus on 16 August 2013, 22:59:28
Ok, could you send me everything needed to reproduce this?
The source code, executable, images u use, even the compiled sfml and tgui libraries.

I want to test this with the exact same resources.

Sure.
https://fbe.am/mJZ

Just place the SFML and TGUI folders in C:\ and you'll be set. That ZIP contains everything.


#8
Feature requests / Re: RenderTexture support?
16 August 2013, 22:28:56
My friend just tested it on Windows 8. Same result as me.

#9
Feature requests / Re: RenderTexture support?
16 August 2013, 20:30:43
Derp, I was using the wrong version in my test/minimal example program. However, I was using the correct library in my actual program.

When switching up the versions, the problem went from simply not rendering the background, to full-fledged distortion again.


Without initializing the form:
int main ( int argc, char *argv[] )
{
// Create a new render-window
sf::RenderWindow window(sf::VideoMode(800, 600), "SFML window");
//tgui::Form form(window);

// Create a new render-texture
sf::RenderTexture texture;
if (!texture.create(800, 600))
return -1;

// Create a textured vertex array
sf::VertexArray va;
va.resize(4);
va.setPrimitiveType(sf::Quads);

va[0].position = sf::Vector2f(0, 0);
va[1].position = sf::Vector2f(0, 600);
va[2].position = sf::Vector2f(800, 600);
va[3].position = sf::Vector2f(800, 0);

va[0].texCoords = sf::Vector2f(0, 0);
va[1].texCoords = sf::Vector2f(0, 459);
va[2].texCoords = sf::Vector2f(624, 459);
va[3].texCoords = sf::Vector2f(624, 0);

sf::Texture vatex;
vatex.loadFromFile("rsc/sprites.png");

// Add GUI elements
//tgui::Button* button = form.add<tgui::Button>();
//button->load("rsc/GUI/Button");
//button->setPosition(100, 100);
//button->setText("Hello World");
//button->callbackID = 1;
//button->show();

// The main loop
while (window.isOpen())
{
// Event handling
sf::Event Event;
while (window.pollEvent(Event))
{
if (Event.type == sf::Event::Closed)
window.close();

//form.handleEvent(Event);
}

//tgui::Callback callback;
//while(form.getCallback(callback))
//{
//if((callback.callbackID == 1))
//std::cout << "pressed\n";
//}

// Clear the whole texture with red color
texture.clear(sf::Color::Red);

// Draw stuff to the texture
texture.draw(va, &vatex);

// We're done drawing to the texture
texture.display();

// Now we start rendering to the window, clear it first
window.clear();

// Draw the texture
sf::Sprite sprite(texture.getTexture());
window.draw(sprite);
//form.draw();

// End the current frame and display its contents on screen
window.display();
}

return 0;
}






Initializing the form:
int main ( int argc, char *argv[] )
{
// Create a new render-window
sf::RenderWindow window(sf::VideoMode(800, 600), "SFML window");
tgui::Form form(window);

// Create a new render-texture
sf::RenderTexture texture;
if (!texture.create(800, 600))
return -1;

// Create a textured vertex array
sf::VertexArray va;
va.resize(4);
va.setPrimitiveType(sf::Quads);

va[0].position = sf::Vector2f(0, 0);
va[1].position = sf::Vector2f(0, 600);
va[2].position = sf::Vector2f(800, 600);
va[3].position = sf::Vector2f(800, 0);

va[0].texCoords = sf::Vector2f(0, 0);
va[1].texCoords = sf::Vector2f(0, 459);
va[2].texCoords = sf::Vector2f(624, 459);
va[3].texCoords = sf::Vector2f(624, 0);

sf::Texture vatex;
vatex.loadFromFile("rsc/sprites.png");

// Add GUI elements
tgui::Button* button = form.add<tgui::Button>();
button->load("rsc/GUI/Button");
button->setPosition(100, 100);
button->setText("Hello World");
button->callbackID = 1;
button->show();

// The main loop
while (window.isOpen())
{
// Event handling
sf::Event Event;
while (window.pollEvent(Event))
{
if (Event.type == sf::Event::Closed)
window.close();

//form.handleEvent(Event);
}

tgui::Callback callback;
while(form.getCallback(callback))
{
if((callback.callbackID == 1))
std::cout << "pressed\n";
}

// Clear the whole texture with red color
texture.clear(sf::Color::Red);

// Draw stuff to the texture
texture.draw(va, &vatex);

// We're done drawing to the texture
texture.display();

// Now we start rendering to the window, clear it first
window.clear();

// Draw the texture
sf::Sprite sprite(texture.getTexture());
window.draw(sprite);
//form.draw();

// End the current frame and display its contents on screen
window.display();
}

return 0;
}






Drawing the form
int main ( int argc, char *argv[] )
{
// Create a new render-window
sf::RenderWindow window(sf::VideoMode(800, 600), "SFML window");
tgui::Form form(window);

// Create a new render-texture
sf::RenderTexture texture;
if (!texture.create(800, 600))
return -1;

// Create a textured vertex array
sf::VertexArray va;
va.resize(4);
va.setPrimitiveType(sf::Quads);

va[0].position = sf::Vector2f(0, 0);
va[1].position = sf::Vector2f(0, 600);
va[2].position = sf::Vector2f(800, 600);
va[3].position = sf::Vector2f(800, 0);

va[0].texCoords = sf::Vector2f(0, 0);
va[1].texCoords = sf::Vector2f(0, 459);
va[2].texCoords = sf::Vector2f(624, 459);
va[3].texCoords = sf::Vector2f(624, 0);

sf::Texture vatex;
vatex.loadFromFile("rsc/sprites.png");

// Add GUI elements
tgui::Button* button = form.add<tgui::Button>();
button->load("rsc/GUI/Button");
button->setPosition(100, 100);
button->setText("Hello World");
button->callbackID = 1;
button->show();

// The main loop
while (window.isOpen())
{
// Event handling
sf::Event Event;
while (window.pollEvent(Event))
{
if (Event.type == sf::Event::Closed)
window.close();

//form.handleEvent(Event);
}

tgui::Callback callback;
while(form.getCallback(callback))
{
if((callback.callbackID == 1))
std::cout << "pressed\n";
}

// Clear the whole texture with red color
texture.clear(sf::Color::Red);

// Draw stuff to the texture
texture.draw(va, &vatex);

// We're done drawing to the texture
texture.display();

// Now we start rendering to the window, clear it first
window.clear();

// Draw the texture
sf::Sprite sprite(texture.getTexture());
window.draw(sprite);
form.draw();

// End the current frame and display its contents on screen
window.display();
}

return 0;
}





As you can see, when drawing the form, it completely glitches out and produces all of these weird artifacts (the button graphic is replaced by the render texture?). Hovering over the button distorts it further (but only if I have more images loaded within the program). When initializing the form, it wipes everything and doesn't even draw the RenderTexture.

I have no clue why this would happen after looking through TGUI's source. I'm sorry that you have to debug all of this ;_;




#10
Feature requests / Re: RenderTexture support?
16 August 2013, 19:29:03
Quote from: texus on 16 August 2013, 09:35:37
But you are definately not running the latest tgui and sfml versions.

You are passing a pointer to the Form constructor, I changed it to a reference on 21 August.

You should try again with TGUI v0.5.2 and SFML 2.1.

I updated them yesterday before I made the post.



That was the download that was on the TGUI homepage. Was it the wrong version?
#11
Feature requests / Re: RenderTexture support?
16 August 2013, 02:39:39
Here's the minimal example:

#include <fstream>
#include <iostream>
#include <string>
#include <TGUI\TGUI.hpp>

int main ( int argc, char *argv[] )
{
// Create a new render-window
sf::RenderWindow window(sf::VideoMode(800, 600), "SFML window");
tgui::Form form(&window);

// Create a new render-texture
sf::RenderTexture texture;
if (!texture.create(800, 600))
return -1;

// Create a textured vertex array
sf::VertexArray va;
va.resize(4);
va.setPrimitiveType(sf::Quads);

va[0].position = sf::Vector2f(0, 0);
va[1].position = sf::Vector2f(0, 600);
va[2].position = sf::Vector2f(800, 600);
va[3].position = sf::Vector2f(800, 0);

va[0].texCoords = sf::Vector2f(0, 0);
va[1].texCoords = sf::Vector2f(0, 384);
va[2].texCoords = sf::Vector2f(224, 384);
va[3].texCoords = sf::Vector2f(224, 0);

sf::Texture vatex;
vatex.loadFromFile("rsc/sprites.png");

// Add GUI elements
tgui::Button* button = form.add<tgui::Button>();
button->load("rsc/GUI/Button");
button->setPosition(100, 100);
button->setText("Hello World");
button->callbackID = 1;
button->show();

// The main loop
while (window.isOpen())
{
// Event handling
sf::Event Event;
while (window.pollEvent(Event))
{
if (Event.type == sf::Event::Closed)
window.close();

form.handleEvent(Event);
}

tgui::Callback callback;
while(form.getCallback(callback))
{
if((callback.callbackID == 1))
std::cout << "pressed\n";
}

// Clear the whole texture with red color
texture.clear(sf::Color::Red);

// Draw stuff to the texture
texture.draw(va, &vatex);

// We're done drawing to the texture
texture.display();

// Now we start rendering to the window, clear it first
window.clear();

// Draw the texture
sf::Sprite sprite(texture.getTexture());
window.draw(sprite);
form.draw();

// End the current frame and display its contents on screen
window.display();
}

return 0;
}


The screen shows up black-- only the button is rendered. Without form.draw(), there are no problems.

With form.draw()


Without form.draw() (this is what it's supposed to look like)


I'm running Windows 7 with the Intel Chipset Family drivers (all updated).
#12
Feature requests / Re: RenderTexture support?
16 August 2013, 02:07:29
Umm... I think tgui::Form.draw() has some issues...



Here is what it's supposed to look like:



The first image looks like it corrupted my tileset.png, which is loaded separately into an sf::Texture (I think it's pointing to an invalid piece of memory?). I'll try to whip up a complete and minimal example.


EDIT:
It also crashes later once I try to set a string for sf::Text, and the debugger points towards sf::Font::getGlyph().
#13
Feature requests / Re: RenderTexture support?
16 August 2013, 01:33:28
Hmm... that's very odd, mine is simply a black screen.

I'm using the workaround method. How would I draw the form?
#14
Feature requests / Re: RenderTexture support?
16 August 2013, 00:53:06
Ok, just to confirm, this code doesn't give you any troubles (I altered it)? It just shows up as a black screen for me.


#include <fstream>
#include <iostream>
#include <string>
#include <TGUI\TGUI.hpp>

#include <fstream>
#include <iostream>
#include <string>
#include <TGUI\TGUI.hpp>

int main ( int argc, char *argv[] )
{
// Create a new render-window
tgui::Window window(sf::VideoMode(800, 600), "SFML window");

// Create a new render-texture
sf::RenderTexture texture;
if (!texture.create(800, 600))
return -1;

// Create a textured vertex array
sf::VertexArray va;
va.resize(4);
va.setPrimitiveType(sf::Quads);

va[0].position = sf::Vector2f(0, 0);
va[1].position = sf::Vector2f(0, 600);
va[2].position = sf::Vector2f(800, 600);
va[3].position = sf::Vector2f(800, 0);

va[0].texCoords = sf::Vector2f(0, 0);
va[1].texCoords = sf::Vector2f(0, 384);
va[2].texCoords = sf::Vector2f(224, 384);
va[3].texCoords = sf::Vector2f(224, 0);

sf::Texture vatex;
vatex.loadFromFile("rsc/sprites.png");

// The main loop
while (window.isOpen())
{
// Event handling
sf::Event Event;
while (window.pollEvent(Event))
{
if (Event.type == sf::Event::Closed)
window.close();
}

// Clear the whole texture with red color
texture.clear(sf::Color::Red);

// Draw stuff to the texture
texture.draw(va, &vatex);

// We're done drawing to the texture
texture.display();

// Now we start rendering to the window, clear it first
window.clear();

// Draw the texture
sf::Sprite sprite(texture.getTexture());
window.draw(sprite);

// End the current frame and display its contents on screen
window.display();
}

return 0;
}
#15
Feature requests / Re: RenderTexture support?
16 August 2013, 00:50:41
Quote from: texus on 15 August 2013, 23:15:11
I don't even see how it is technically possible that it works with sf::RenderWindow but not with tgui::Window.
tgui::Window just inherits from sf::RenderWindow.

That's what's confusing me. I have the Intel graphics cards that were giving Laurent some troubles earlier, but it's all fixed in 2.1 (all examples work fine for me, just TGUI gives me problems).

I'll run some more tests and see what I can find ;)