Page 40 of 50

Re: C++ -kysymykset

Posted: Sat Sep 18, 2010 5:21 pm
by DJ-Filbe
Näillä eväillä mennään, kiitos kaikille auttaneille avusta :)

Re: C++ -kysymykset

Posted: Mon Oct 18, 2010 3:09 pm
by Sami345
Eli siis ikkunaan piirtämäni kuva välkkyy. Jos laitan glBufferDataARB:n kutsun tuonne väliin, ohjelma toimii, mutta bufferiin tallennettu data saattaa kadota.

Koodi, jossa ongelma on:

Code: Select all

    void BasicWindow::flip()
    {
        HDC oldDC = wglGetCurrentDC();
        HGLRC oldRC = wglGetCurrentContext();

        wglMakeCurrent(hDC, hRC);

        if(GLEW_ARB_pixel_buffer_object)
        {
            glUnmapBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB);
            glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, getWidth(), getHeight(), GL_RGBA, GL_UNSIGNED_BYTE, 0);
            //Jos poistan kommentoinnin seuraavasta rivistä toimii, mutta bufferiin tallennettu data saattaa muuttua
            //glBufferDataARB(GL_PIXEL_UNPACK_BUFFER_ARB, getWidth() * getHeight() * 4, 0, GL_STREAM_DRAW_ARB);
            data = static_cast<unsigned int*>(glMapBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, GL_READ_WRITE_ARB));
        }
        else
        {
            glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, getWidth(), getHeight(), 0, GL_RGBA, GL_UNSIGNED_BYTE, getData());
        }


        glBegin(GL_QUADS);
            glTexCoord2f(0.0f, 0.0f); glVertex2f(-1.0f, 1.0f);
            glTexCoord2f(1.0f, 0.0f); glVertex2f( 1.0f, 1.0f);
            glTexCoord2f(1.0f, 1.0f); glVertex2f( 1.0f,-1.0f);
            glTexCoord2f(0.0f, 1.0f); glVertex2f(-1.0f,-1.0f);
        glEnd();

        SwapBuffers(hDC);



        wglMakeCurrent(oldDC, oldRC);
    }
Koodi, jolla testaan kirjastoani:

Code: Select all

#include <AML.hpp>

#include <iostream>
#include <exception>

int main()
{

    bool exit = false;

    AML::init();

    AML::BasicWindow window;

    window.open(300, 300, "AML testi 1", AML_WS_WINDOWED | AML_WS_MINIMIZEBOX | AML_WS_SYSMENU | AML_WS_RESIZABLE);

    window.show();

    while(!exit)
    {
        //AML::drawFilledCircle(window, 400, 300, 300, red);
        //AML::drawFilledRectangle(window2, 0, 0, 800, 600, window.getFormat().getColor(0  , 255, 0));

        AML::Event *event = AML::peekEvent();

        if(event->target == &window)
        {
            std::cout << "Window 1: " << std::endl;
        }

        switch(event->type)
        {
            case AML::CLOSE:
            {
                exit = true;
                break;
            }
            case AML::KEYDOWN:
            {
                AML::KeyDownEvent *key_event = static_cast<AML::KeyDownEvent*>(event);
                std::cout << "Down: " << key_event->key << std::endl;
                break;
            }
            case AML::KEYUP:
            {
                AML::KeyUpEvent *key_event = static_cast<AML::KeyUpEvent*>(event);
                std::cout << "Up: " << key_event->key << std::endl;
                break;
            }
        }

        delete event;

        window.fillWithColor(AML::mapRGB(0, 0, 0));

        window.drawRectangle(0, 0, 300, 300, AML::mapRGB(255, 0, 0), true);

        window.flip();


        AML::update();
    }
}
Ongelma:
ongelma.png
ongelma.png (19.72 KiB) Viewed 6868 times
EDIT:

Sain IRC:ssä vastauksen. Piti laittaa glFinish piirron loppuun.


Re: C++ -kysymykset

Posted: Sat Nov 06, 2010 4:49 pm
by DJ-Filbe
Miten listaan nykyisen kansion tiedostot ja tallennan ne tiedostoon? Entä kansiossa siirtyminen tiedostosta saatavilla parametreilla?

Re: C++ -kysymykset

Posted: Sat Nov 06, 2010 11:11 pm
by KilledWhale
DJ-Filbe wrote:Miten listaan nykyisen kansion tiedostot ja tallennan ne tiedostoon? Entä kansiossa siirtyminen tiedostosta saatavilla parametreilla?
Itse olen tykästynyt boostiin. Toimii useilla käyttöjärjestelmillä ja on hyvin dokumentoitu.
Iso läjä hyödyllisiä ominaisuuksia muun muassa kansiorakenteessa selaaminen.

Boost filesystem lienee se mitä haet.

Tiedostoon kirjoitus onnistuu taas fstreamin avulla, mikä löytyy standardikirjastoista.
http://www.cppreference.com/
Linkin takaa C++ I/O.

Re: C++ -kysymykset

Posted: Sun Nov 07, 2010 12:11 am
by esa94
KilledWhale wrote:
DJ-Filbe wrote:Miten listaan nykyisen kansion tiedostot ja tallennan ne tiedostoon? Entä kansiossa siirtyminen tiedostosta saatavilla parametreilla?
Itse olen tykästynyt boostiin. Toimii useilla käyttöjärjestelmillä ja on hyvin dokumentoitu.
Iso läjä hyödyllisiä ominaisuuksia muun muassa kansiorakenteessa selaaminen.

Boost filesystem lienee se mitä haet.

Tiedostoon kirjoitus onnistuu taas fstreamin avulla, mikä löytyy standardikirjastoista.
http://www.cppreference.com/
Linkin takaa C++ I/O.
Jea, boost on tähän hyvä.

Jos taas haluat pelkästään keveän Win32- ja POSIX-yhteensopivan tiedostojärjestelmäkirjaston, Dao saattaisi olla kokeilemisen arvoinen.

Re: C++ -kysymykset

Posted: Thu Jan 06, 2011 12:51 am
by Sly_Jack0
Miksi kyseinen ohjelma katoaa heti ilmestyttyään?

Code: Select all

#include "SDL.h"
#include "SDL_image.h"
#include "SDL_ttf.h"
#include <string>

const int SCREEN_W = 800;
const int SCREEN_H = 600;
const int SCREEN_BPP = 32;

SDL_Surface *image = NULL;
SDL_Surface *background = NULL;
SDL_Surface *message = NULL;
SDL_Surface *screen = NULL;

SDL_Event event;

TTF_Font *font = NULL;

SDL_Color textColor = {255,255,255};

SDL_Surface *load_image(std::string filename)
{
    SDL_Surface* loadedImage = NULL;
    SDL_Surface* optimizedImage = NULL;

    loadedImage = IMG_Load(filename.c_str());

    if (loadedImage != NULL)
    {
        optimizedImage = SDL_DisplayFormatAlpha(loadedImage);

        SDL_FreeSurface(loadedImage);

		/*
        if (optimizedImage != NULL)
        {
        	Uint32 colorKey = SDL_MapRGB(optimizedImage->format,255,0,255);
        	SDL_SetColorKey(optimizedImage,SDL_SRCCOLORKEY,colorKey);
        }
        */
    }

    return optimizedImage;
}

void apply_surface(int x,int y,SDL_Surface* source,SDL_Surface* dest,SDL_Rect* clip = NULL)
{
    SDL_Rect offset;

    offset.x = x;
    offset.y = y;

    SDL_BlitSurface(source,clip,dest,&offset);
}

bool init()
{
	if (SDL_Init(SDL_INIT_EVERYTHING) == -1)
	{
		return false;
	}

	screen = SDL_SetVideoMode(SCREEN_W,SCREEN_H,SCREEN_BPP,SDL_SWSURFACE);

	if (screen == NULL)
	{
		return false;
	}

	if (TTF_Init() == -1)
	{
		return false;
	}

	SDL_WM_SetCaption("TTF test",NULL);

	return true;
}

bool load_files()
{
	image = load_image("pallot.png");
	background = load_image("bg.png");

	font = TTF_OpenFont("arial.ttf",18);

	if (image == NULL || background == NULL || font == NULL)
	{
		return false;
	}

	return true;
}

void clean_up()
{
	SDL_FreeSurface(image);
	SDL_FreeSurface(background);
	SDL_FreeSurface(message);

	TTF_CloseFont(font);

	TTF_Quit();
	SDL_Quit();
}

int main(int argc, char* args[])
{
	bool quit = false;

	if (init() == false)
	{
		return 1;
	}

	if (load_files() == false)
	{
		return 1;
	}

	message = TTF_RenderText_Solid(font,"Hello TTF world!",textColor);

	if (message == NULL)
	{
		return 1;
	}

	apply_surface(0,0,background,screen);
	apply_surface(0,150,message,screen);

	if (SDL_Flip(screen) == -1)
	{
		return 1;
	}

	while(quit == false)
	{
		while(SDL_PollEvent(&event))
		{
			if(event.type == SDL_QUIT)
			{

				quit = true;
			}
		}
	}

	clean_up();

    return 0;
}

Re: C++ -kysymykset

Posted: Thu Jan 06, 2011 10:57 am
by KilledWhale
Sly_Jack0 wrote:Miksi kyseinen ohjelma katoaa heti ilmestyttyään?

Code: Select all

SNIP
Sinulta puuttuu loopin sisästä SDL_Flip(screen);
Ainakin itselläni ohjelma pysyi päällä kun sinne laitoin vielä sen.

Re: C++ -kysymykset

Posted: Thu Jan 06, 2011 12:29 pm
by Sly_Jack0
Ei auta. Ja sitä paitsi tuolla on SDL_Flip ennen sitä looppia. Ei sen pitäisi vaikuttaa ohjelman sulkeutumiseen.
EDIT:

Sain toimimaan. En älynnyt, että se ei hae niitä fontteja Winowsin kansiosta, vaan pitää kopioida projektin mukaan.


Re: C++ -kysymykset

Posted: Thu Jan 06, 2011 2:19 pm
by Koodiapina
Sly_Jack0 wrote:Sain toimimaan. En älynnyt, että se ei hae niitä fontteja Winowsin kansiosta, vaan pitää kopioida projektin mukaan.
Kyllä ne voi sieltä Windowsin kansiostakin hakea. Polku: C:\\Windows/Fonts/<fontti>

Suosittelen muuten tekemään vähän selkeämmät virheenkäsittelyt, että löydät tällaiset virheet nopeammin.

Re: C++ -kysymykset

Posted: Thu Jan 06, 2011 2:21 pm
by Sly_Jack0
Grandi wrote:Kyllä ne voi sieltä Windowsin kansiostakin hakea. Polku: C:\\Windows/Fonts/<fontti>
Tietenkin. Mutta siis, että ei hae automaagisesti.

Re: C++ -kysymykset

Posted: Thu Jan 06, 2011 2:32 pm
by Koodiapina
Ihmettelin vain tuota, kun väitit, että ne fontit pitää kopioida projektiin mukaan. Yritin tarjota vaihtoehtoisen ratkaisun.

Re: C++ -kysymykset

Posted: Sat Jan 08, 2011 4:00 pm
by Sly_Jack0
Mitä eroa on esim. tällä

Code: Select all

SDL_Rect *rect;
ja tällä

Code: Select all

SDL_Rect* rect;
?
Ja millaisissa tilanteissa tulee käyttää kumpaa?

Re: C++ -kysymykset

Posted: Sat Jan 08, 2011 4:07 pm
by Koodiapina
Ne ovat täsmälleen sama asia.

Re: C++ -kysymykset

Posted: Sat Jan 08, 2011 4:23 pm
by Sly_Jack0
Kiitoksia. Vähän hämäs vaan kun tutoriaalis käytetään molempia sekasin.

Re: C++ -kysymykset

Posted: Fri Feb 04, 2011 4:34 pm
by DJ-Filbe
Miten piirrän yksinkertaisen pikselin näyttökoordinaatteihin?
Haluaisin kaiken tarpeellisen, eli jonkun hyvin yksinkertaisen kirjaston ja esimerkin. Funktion tulisi toimia kuten CB:n DOT -komento.

Re: C++ -kysymykset

Posted: Fri Feb 04, 2011 10:30 pm
by MaGetzUb
Noh kannattaapi melkein käyttää SDL multimedia kirjastoa. Ja GFX lisäosa kirjastoa. ;)

Code: Select all

 Ei enää mitään..
EN ole varma tuon koodin toimivuudesta, koska olen ohjelmoinut nyt FreeBASIC:la ja se on vähän sekoittanut päätä. :)

Re: C++ -kysymykset

Posted: Fri Feb 04, 2011 10:34 pm
by Koodiapina
Tuo koodi on niin vialla kuin voi vain olla.

Re: C++ -kysymykset

Posted: Fri Feb 04, 2011 10:38 pm
by MaGetzUb
Grandi wrote:Tuo koodi on niin vialla kuin voi vain olla.
No annas tulla kaikki mitä siinä on vialla? C++:a linkitys ja kaikki muukin on niin sekavaa, että luovutin sen kanssa pelleilemisen.

Re: C++ -kysymykset

Posted: Fri Feb 04, 2011 10:42 pm
by Koodiapina
  • Isoilla ja pienillä kirjaimilla on merkitystä. Yrität käyttää mm. If ja While.
  • Toimintakoodisi ei ole minkään funktion sisällä.
  • SDL_init(...) palauttaa -1, kun alustus epäonnistuu, muutoin 0. Iffin sisällä oleva koodi siis suoritettaisiin vain, kun alustus epäonnistuu.
  • SDL_HWSURFACE||SDL_DOUBLEBUF <- Vain yksi |-merkki.
  • While(done = true) <- Et ole määritellyt mitään done-muuttujaa, ja tuskin sellaista noista SDL-kirjastoistakaan löytyy. Lisäksi en usko, että tarkoitat tuolla ehtolauseella sitä, mitä se oikeasti tarkoittaa. done = true asettaa done-muuttujan arvoksi 1, ja samalla koko "lausekkeen arvoksi" muodostuu 1. Se on siis eri asia kuin done == true, joka kertoo onko done-muuttujan arvo 1.
Tuossa muutama juttu, mitä pikaisella vilkaisulla huomasin.

Re: C++ -kysymykset

Posted: Fri Feb 04, 2011 11:03 pm
by MaGetzUb
Grandi wrote:
  • Isoilla ja pienillä kirjaimilla on merkitystä. Yrität käyttää mm. If ja While.
  • Toimintakoodisi ei ole minkään funktion sisällä.
  • SDL_init(...) palauttaa -1, kun alustus epäonnistuu, muutoin 0. Iffin sisällä oleva koodi siis suoritettaisiin vain, kun alustus epäonnistuu.
  • SDL_HWSURFACE||SDL_DOUBLEBUF <- Vain yksi |-merkki.
  • While(done = true) <- Et ole määritellyt mitään done-muuttujaa, ja tuskin sellaista noista SDL-kirjastoistakaan löytyy. Lisäksi en usko, että tarkoitat tuolla ehtolauseella sitä, mitä se oikeasti tarkoittaa. done = true asettaa done-muuttujan arvoksi 1, ja samalla koko "lausekkeen arvoksi" muodostuu 1. Se on siis eri asia kuin done == true, joka kertoo onko done-muuttujan arvo 1.
Tuossa muutama juttu, mitä pikaisella vilkaisulla huomasin.
Ohups niinpäs puuttui maini... :D Joo palautuipa nyt C++ mieleeni. :)