C++ -kysymykset
Re: C++ -kysymykset
Näillä eväillä mennään, kiitos kaikille auttaneille avusta
Re: C++ -kysymykset
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:
Koodi, jolla testaan kirjastoani:
Ongelma:
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);
}
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();
}
}
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/
Voitot: Viikkokisa XIII, Pikapelikisa 3, Pikapelikisa 13
http://www.sami345.tk/
Re: C++ -kysymykset
Miten listaan nykyisen kansion tiedostot ja tallennan ne tiedostoon? Entä kansiossa siirtyminen tiedostosta saatavilla parametreilla?
-
- Tech Developer
- Posts: 545
- Joined: Sun Aug 26, 2007 2:43 pm
- Location: Liminka
Re: C++ -kysymykset
Itse olen tykästynyt boostiin. Toimii useilla käyttöjärjestelmillä ja on hyvin dokumentoitu.DJ-Filbe wrote:Miten listaan nykyisen kansion tiedostot ja tallennan ne tiedostoon? Entä kansiossa siirtyminen tiedostosta saatavilla parametreilla?
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
Kehittäjä
cbFUN Kello
cbSDL
Whale.dy.fi
<@cce> miltäs tuntuu olla suomen paras
Re: C++ -kysymykset
Jea, boost on tähän hyvä.KilledWhale wrote:Itse olen tykästynyt boostiin. Toimii useilla käyttöjärjestelmillä ja on hyvin dokumentoitu.DJ-Filbe wrote:Miten listaan nykyisen kansion tiedostot ja tallennan ne tiedostoon? Entä kansiossa siirtyminen tiedostosta saatavilla parametreilla?
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.
Jos taas haluat pelkästään keveän Win32- ja POSIX-yhteensopivan tiedostojärjestelmäkirjaston, Dao saattaisi olla kokeilemisen arvoinen.
Re: C++ -kysymykset
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;
}
-
- Tech Developer
- Posts: 545
- Joined: Sun Aug 26, 2007 2:43 pm
- Location: Liminka
Re: C++ -kysymykset
Sinulta puuttuu loopin sisästä SDL_Flip(screen);Sly_Jack0 wrote:Miksi kyseinen ohjelma katoaa heti ilmestyttyään?Code: Select all
SNIP
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
Kehittäjä
cbFUN Kello
cbSDL
Whale.dy.fi
<@cce> miltäs tuntuu olla suomen paras
Re: C++ -kysymykset
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.
-
- Forum Veteran
- Posts: 2396
- Joined: Tue Aug 28, 2007 4:20 pm
Re: C++ -kysymykset
Kyllä ne voi sieltä Windowsin kansiostakin hakea. Polku: C:\\Windows/Fonts/<fontti>Sly_Jack0 wrote:Sain toimimaan. En älynnyt, että se ei hae niitä fontteja Winowsin kansiosta, vaan pitää kopioida projektin mukaan.
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 1:23 pm, edited 1 time in total.
Re: C++ -kysymykset
Tietenkin. Mutta siis, että ei hae automaagisesti.Grandi wrote:Kyllä ne voi sieltä Windowsin kansiostakin hakea. Polku: C:\\Windows/Fonts/<fontti>
-
- Forum Veteran
- Posts: 2396
- Joined: Tue Aug 28, 2007 4:20 pm
Re: C++ -kysymykset
Ihmettelin vain tuota, kun väitit, että ne fontit pitää kopioida projektiin mukaan. Yritin tarjota vaihtoehtoisen ratkaisun.
Re: C++ -kysymykset
Mitä eroa on esim. tällä
ja tällä
?
Ja millaisissa tilanteissa tulee käyttää kumpaa?
Code: Select all
SDL_Rect *rect;
Code: Select all
SDL_Rect* rect;
Ja millaisissa tilanteissa tulee käyttää kumpaa?
-
- Forum Veteran
- Posts: 2396
- Joined: Tue Aug 28, 2007 4:20 pm
Re: C++ -kysymykset
Ne ovat täsmälleen sama asia.
Re: C++ -kysymykset
Kiitoksia. Vähän hämäs vaan kun tutoriaalis käytetään molempia sekasin.
Re: C++ -kysymykset
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.
Haluaisin kaiken tarpeellisen, eli jonkun hyvin yksinkertaisen kirjaston ja esimerkin. Funktion tulisi toimia kuten CB:n DOT -komento.
Re: C++ -kysymykset
Noh kannattaapi melkein käyttää SDL multimedia kirjastoa. Ja GFX lisäosa kirjastoa.
EN ole varma tuon koodin toimivuudesta, koska olen ohjelmoinut nyt FreeBASIC:la ja se on vähän sekoittanut päätä.
Code: Select all
Ei enää mitään..
Last edited by MaGetzUb on Fri Feb 04, 2011 10:04 pm, edited 1 time in total.
Solar Eclipse
We're in a simulation, and God is trying to debug us.
-
- Forum Veteran
- Posts: 2396
- Joined: Tue Aug 28, 2007 4:20 pm
Re: C++ -kysymykset
Tuo koodi on niin vialla kuin voi vain olla.
Re: C++ -kysymykset
No annas tulla kaikki mitä siinä on vialla? C++:a linkitys ja kaikki muukin on niin sekavaa, että luovutin sen kanssa pelleilemisen.Grandi wrote:Tuo koodi on niin vialla kuin voi vain olla.
Solar Eclipse
We're in a simulation, and God is trying to debug us.
-
- Forum Veteran
- Posts: 2396
- Joined: Tue Aug 28, 2007 4:20 pm
Re: C++ -kysymykset
- 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.
Re: C++ -kysymykset
Ohups niinpäs puuttui maini... Joo palautuipa nyt C++ mieleeni.Grandi wrote:Tuossa muutama juttu, mitä pikaisella vilkaisulla huomasin.
- 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.
Solar Eclipse
We're in a simulation, and God is trying to debug us.