C++ -kysymykset

Muu yhteisön välinen keskustelu.
DJ-Filbe
Devoted Member
Posts:854
Joined:Sat Feb 20, 2010 3:18 pm
Re: C++ -kysymykset

Post by DJ-Filbe » Sat Sep 18, 2010 5:21 pm

Näillä eväillä mennään, kiitos kaikille auttaneille avusta :)

User avatar
Sami345
Advanced Member
Posts:349
Joined:Fri Aug 31, 2007 4:52 pm
Contact:

Re: C++ -kysymykset

Post by Sami345 » Mon Oct 18, 2010 3:09 pm

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.72KiB)Viewed 6921 times
EDIT:

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

Projektit: Fiperus - Jäädytetty pidemmäksi aikaa.
Voitot: Viikkokisa XIII, Pikapelikisa 3, Pikapelikisa 13
http://www.sami345.tk/

DJ-Filbe
Devoted Member
Posts:854
Joined:Sat Feb 20, 2010 3:18 pm

Re: C++ -kysymykset

Post by DJ-Filbe » Sat Nov 06, 2010 4:49 pm

Miten listaan nykyisen kansion tiedostot ja tallennan ne tiedostoon? Entä kansiossa siirtyminen tiedostosta saatavilla parametreilla?

User avatar
KilledWhale
Tech Developer
Tech Developer
Posts:543
Joined:Sun Aug 26, 2007 2:43 pm
Location:Liminka

Re: C++ -kysymykset

Post by KilledWhale » Sat Nov 06, 2010 11:11 pm

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.
CoolBasic henkilökuntaa
Kehittäjä

cbFUN Kello
cbSDL
Whale.dy.fi

<@cce> miltäs tuntuu olla suomen paras

User avatar
esa94
Guru
Posts:1855
Joined:Tue Sep 04, 2007 5:35 pm

Re: C++ -kysymykset

Post by esa94 » Sun Nov 07, 2010 12:11 am

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.

User avatar
Sly_Jack0
Devoted Member
Posts:612
Joined:Mon Dec 10, 2007 9:25 am

Re: C++ -kysymykset

Post by Sly_Jack0 » Thu Jan 06, 2011 12:51 am

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;
}

User avatar
KilledWhale
Tech Developer
Tech Developer
Posts:543
Joined:Sun Aug 26, 2007 2:43 pm
Location:Liminka

Re: C++ -kysymykset

Post by KilledWhale » Thu Jan 06, 2011 10:57 am

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.
CoolBasic henkilökuntaa
Kehittäjä

cbFUN Kello
cbSDL
Whale.dy.fi

<@cce> miltäs tuntuu olla suomen paras

User avatar
Sly_Jack0
Devoted Member
Posts:612
Joined:Mon Dec 10, 2007 9:25 am

Re: C++ -kysymykset

Post by Sly_Jack0 » Thu Jan 06, 2011 12:29 pm

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.


User avatar
Koodiapina
Forum Veteran
Posts:2396
Joined:Tue Aug 28, 2007 4:20 pm
Contact:

Re: C++ -kysymykset

Post by Koodiapina » Thu Jan 06, 2011 2:19 pm

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.
Last edited by Koodiapina on Thu Jan 06, 2011 2:23 pm, edited 1 time in total.
Olen liian älykäs ollakseni väärässä. Jos olet kanssani eri mieltä, suosittelen sinua pohtimaan omaa elämänkatsomustasi ja sen perusteita.

User avatar
Sly_Jack0
Devoted Member
Posts:612
Joined:Mon Dec 10, 2007 9:25 am

Re: C++ -kysymykset

Post by Sly_Jack0 » Thu Jan 06, 2011 2:21 pm

Grandi wrote:Kyllä ne voi sieltä Windowsin kansiostakin hakea. Polku: C:\\Windows/Fonts/<fontti>
Tietenkin. Mutta siis, että ei hae automaagisesti.

User avatar
Koodiapina
Forum Veteran
Posts:2396
Joined:Tue Aug 28, 2007 4:20 pm
Contact:

Re: C++ -kysymykset

Post by Koodiapina » Thu Jan 06, 2011 2:32 pm

Ihmettelin vain tuota, kun väitit, että ne fontit pitää kopioida projektiin mukaan. Yritin tarjota vaihtoehtoisen ratkaisun.
Olen liian älykäs ollakseni väärässä. Jos olet kanssani eri mieltä, suosittelen sinua pohtimaan omaa elämänkatsomustasi ja sen perusteita.

User avatar
Sly_Jack0
Devoted Member
Posts:612
Joined:Mon Dec 10, 2007 9:25 am

Re: C++ -kysymykset

Post by Sly_Jack0 » Sat Jan 08, 2011 4:00 pm

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?

User avatar
Koodiapina
Forum Veteran
Posts:2396
Joined:Tue Aug 28, 2007 4:20 pm
Contact:

Re: C++ -kysymykset

Post by Koodiapina » Sat Jan 08, 2011 4:07 pm

Ne ovat täsmälleen sama asia.
Olen liian älykäs ollakseni väärässä. Jos olet kanssani eri mieltä, suosittelen sinua pohtimaan omaa elämänkatsomustasi ja sen perusteita.

User avatar
Sly_Jack0
Devoted Member
Posts:612
Joined:Mon Dec 10, 2007 9:25 am

Re: C++ -kysymykset

Post by Sly_Jack0 » Sat Jan 08, 2011 4:23 pm

Kiitoksia. Vähän hämäs vaan kun tutoriaalis käytetään molempia sekasin.

DJ-Filbe
Devoted Member
Posts:854
Joined:Sat Feb 20, 2010 3:18 pm

Re: C++ -kysymykset

Post by DJ-Filbe » Fri Feb 04, 2011 4:34 pm

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.

User avatar
MaGetzUb
Guru
Posts:1715
Joined:Sun Sep 09, 2007 12:35 pm
Location:Alavus

Re: C++ -kysymykset

Post by MaGetzUb » Fri Feb 04, 2011 10:30 pm

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ä. :)
Last edited by MaGetzUb on Fri Feb 04, 2011 11:04 pm, edited 1 time in total.
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.

User avatar
Koodiapina
Forum Veteran
Posts:2396
Joined:Tue Aug 28, 2007 4:20 pm
Contact:

Re: C++ -kysymykset

Post by Koodiapina » Fri Feb 04, 2011 10:34 pm

Tuo koodi on niin vialla kuin voi vain olla.
Olen liian älykäs ollakseni väärässä. Jos olet kanssani eri mieltä, suosittelen sinua pohtimaan omaa elämänkatsomustasi ja sen perusteita.

User avatar
MaGetzUb
Guru
Posts:1715
Joined:Sun Sep 09, 2007 12:35 pm
Location:Alavus

Re: C++ -kysymykset

Post by MaGetzUb » Fri Feb 04, 2011 10:38 pm

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.
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.

User avatar
Koodiapina
Forum Veteran
Posts:2396
Joined:Tue Aug 28, 2007 4:20 pm
Contact:

Re: C++ -kysymykset

Post by Koodiapina » Fri Feb 04, 2011 10:42 pm

  • 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.
Olen liian älykäs ollakseni väärässä. Jos olet kanssani eri mieltä, suosittelen sinua pohtimaan omaa elämänkatsomustasi ja sen perusteita.

User avatar
MaGetzUb
Guru
Posts:1715
Joined:Sun Sep 09, 2007 12:35 pm
Location:Alavus

Re: C++ -kysymykset

Post by MaGetzUb » Fri Feb 04, 2011 11:03 pm

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. :)
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.

Post Reply