Toon posts:

[Borland C++] OpenGL, Console een window laten creëren.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil een opengl *template* maken (gewoon een standaard leeg programma'tje, dat een opengl form opstart), maar hoe doe ik dit?

Op searches, google ed, heb ik alleen maar source gevonden die gebruik maken van glut. Maar ik wil geen glut gebruiken (dan kan ik de source ook voor andere app's gebruiken). De console zou dan gebruikt kunnen worden om x,y,z posities weer te geven, en meer van dat [on]zinnige spul.

In delphi heb ik zo'n programma gevonden, en ik heb geprobeerd het te poorten naar c++, maar dat wou niet echt. Het console scherm starte goed op, maar het windows scherm blijft laden. Je kan dan wel doorwerken met de console (dus geen vastloper). De source heb ik thuis staan, en ik zet het straks er nog wel ff bij.

*edit*--------------------------------------------------------------------------------

Om even duidelijk te wezen, ik wil een Windows form maken waar OpenGL wordt gerenderd, en een dos console box die ernaast draait om informatie weer te geven. Mijn vraag is, hoe maak ik in een console programma een goed werkend windows form.

Het console scherm moet ook aanwezig zijn, dus niet zoals de tutorials van bv Nehe, waar een console programma een scherm maakt, maar het console scherm niet wordt geshowed.

[ Voor 29% gewijzigd door Verwijderd op 11-05-2004 13:03 . Reden: vraagstelling ]


  • EfBe
  • Registratie: Januari 2000
  • Niet online
http://www.sd.nl/demogl

C/C++, bsd licensed. Ik denk dat je hiermee wel een heel end komt.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


Verwijderd

Topicstarter
:/ Niet echt wat ik zoek. Da's volgens mij een graphic library, en dat zoek ik niet. Ik wil weten hoe je met enkel commando's een window form maakt, in een console programma. Dus niet met library's e.d. van anderen.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 25-05 22:48

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op 11 mei 2004 @ 12:31:
:/ Niet echt wat ik zoek. Da's volgens mij een graphic library, en dat zoek ik niet. Ik wil weten hoe je met enkel commando's een window form maakt, in een console programma. Dus niet met library's e.d. van anderen.
http://nehe.gamedev.net stikt van de tutorials hierover.

Wat heb je overigens zelf al geprobeerd? Het lijkt zo namelijk erg op een scriptrequest....

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Wat ik zelf geprobeerd heb, staat thuis :( , en ik ben nu op school (moet ook gebeuren :P ). Nehe heeft wel allemaal tutorials, maar er worden geen console schermen gebruikt, en dat wil ik juist.

Die tutorials van Nehe om een scherm te maken, worden wel gesnapt, maar hoe doe je dat zodat er een console scherm ook draait, dat is de vraag.

En wat bedoel je eigenlijk met een scriptrequest? Dat ik om code vraag :?

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 25-05 22:48

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op 11 mei 2004 @ 12:42:
Wat ik zelf geprobeerd heb, staat thuis :( , en ik ben nu op school (moet ook gebeuren :P ). Nehe heeft wel allemaal tutorials, maar er worden geen console schermen gebruikt, en dat wil ik juist.

Die tutorials van Nehe om een scherm te maken, worden wel gesnapt, maar hoe doe je dat zodat er een console scherm ook draait, dat is de vraag.

En wat bedoel je eigenlijk met een scriptrequest? Dat ik om code vraag :?
Nehe maakt volledig in code een window aan met een OpenGL context. Waarom zou je hier nog een console windows bij willen hebben? Voor logging e.d. kan je ook een file gebruiken.

Als je in BCB kiest voor file->new->Console Application heb je een application met een console window. Als je hierin weer een nieuw Window aanmaakt met een OpenGL Context dan heb je je twee windows.

Het lijkt op een scriptrequest omdat je alleen maar vraagt om een template met code ;)

Of bedoel je een quake like console? Ook daar heeft nehe een tutorial voor dacht ik ;)

[ Voor 14% gewijzigd door Creepy op 11-05-2004 13:00 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Ik vraag om een template met code? Dan stel ik de vraag verkeerd. :+ Oops.
Ik wil het gebruiken als een template, maar ik wil weten hoe je die console box erbij krijgt.

Daar bedoel ik mee, een dos, console box. Zo'n tutorial heb ik bij Nehe nog niet gezien. Het moet mogelijk zijn om een console box te hebben draaien en dan een windows form ernaast waar de opengl wordt gerenderd.

De console box wil ik gebruiken zodat ik kan zien wat ik doe, terwijl het programma draait. Ik kan natuurlijk wel een log bijhouden, maar met een console kan ik direct zien wat er verandert, en misschien een beetje met commando's e.d. werken.

[ Voor 23% gewijzigd door Verwijderd op 11-05-2004 13:06 ]


Verwijderd

debug_console.h
C++:
1
2
3
4
#ifndef __DEBUG_CONSOLE_H__
#define __DEBUG_CONSOLE_H__
void RedirectIOToConsole();
#endif

debug_console.cpp
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <windows.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#include <iostream>
#include <fstream>
using namespace std;
// maximum mumber of lines the output console should have
static const WORD MAX_CONSOLE_LINES = 500;
void RedirectIOToConsole()
{
int hConHandle;
long lStdHandle;
CONSOLE_SCREEN_BUFFER_INFO coninfo;
FILE *fp;
// allocate a console for this app
AllocConsole();
// set the screen buffer to be big enough to let us scroll text
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), 
&coninfo);
coninfo.dwSize.Y = MAX_CONSOLE_LINES;
SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), 
coninfo.dwSize);
// redirect unbuffered STDOUT to the console
lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE);
hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
fp = _fdopen( hConHandle, "w" );
*stdout = *fp;
setvbuf( stdout, NULL, _IONBF, 0 );
// redirect unbuffered STDIN to the console
lStdHandle = (long)GetStdHandle(STD_INPUT_HANDLE);
hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
fp = _fdopen( hConHandle, "r" );
*stdin = *fp;
setvbuf( stdin, NULL, _IONBF, 0 );
// redirect unbuffered STDERR to the console
lStdHandle = (long)GetStdHandle(STD_ERROR_HANDLE);
hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
fp = _fdopen( hConHandle, "w" );
*stderr = *fp;
setvbuf( stderr, NULL, _IONBF, 0 );
// make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog 
// point to console as well
ios::sync_with_stdio();
}


en dan in je hoofd app gewoon RedirectIOToConsole(); aanroepen
schrijven gaat dan met cout, wcout, cin, wcin, wcerr, cerr, wclog en clog.
Het is by the way uit een andere tutorial maar ik weet niet meer waarvandaan, codeguru ofzowiets d8 ik

Verwijderd

Topicstarter
Dus als ik het goed heb, maakt dit lappie code een console box ipv, een windows form?.
Hier moet het dan wel mee lukken (dan was het dus toch een script request :P).

[ Voor 96% gewijzigd door Verwijderd op 11-05-2004 13:36 ]


  • EfBe
  • Registratie: Januari 2000
  • Niet online
Verwijderd schreef op 11 mei 2004 @ 12:31:
:/ Niet echt wat ik zoek. Da's volgens mij een graphic library, en dat zoek ik niet. Ik wil weten hoe je met enkel commando's een window form maakt, in een console programma. Dus niet met library's e.d. van anderen.
Is geen graphics library, is een platform die alles regelt voor het laten zien van graphics mbv opengl, dus al die overhead die jij zelf wilt gaan programmeren zit daar dus juist in, incl een quake style console e.d. Je kunt daarin dus kijken hoe het gedaan is en de code eventueel gebruiken in je eigen programma. Zoals ik zei: bsd licensed.

Je moet het natuurlijk zelf weten :)

[ Voor 3% gewijzigd door EfBe op 11-05-2004 13:53 ]

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


Verwijderd

Topicstarter
Niet gelukt. Ik krijg een error als ik je code uitvoer, namelijk het volgende:

[Linker Error] Unresolved external 'RedirectIOToConsole()' referenced from U:\WINDOW\UNIT1.OBJ

Maar ik geef de namen wel goed op (copy paste).

Verwijderd

Topicstarter
EfBe schreef op 11 mei 2004 @ 13:52:
[...]

Is geen graphics library, is een platform die alles regelt voor het laten zien van graphics mbv opengl, dus al die overhead die jij zelf wilt gaan programmeren zit daar dus juist in, incl een quake style console e.d. Je kunt daarin dus kijken hoe het gedaan is en de code eventueel gebruiken in je eigen programma. Zoals ik zei: bsd licensed.

Je moet het natuurlijk zelf weten :)
Ok, ok. Maar ik wil enkel een console window met een windows form hebben draaien. Misschien ook nog met andere programma's, zonder OpenGL. Dus een geheel platform gebruiken lijkt me overbodig.

[ Voor 100% gewijzigd door Verwijderd op 11-05-2004 13:57 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:56

.oisyn

Moderator Devschuur®

Demotivational Speaker

Wat is nou eigenlijk het probleem? Waarom zou een window aanmaken vanuit een console app anders zijn dan een windows app? Ik snap echt de moeilijkheid niet :?
Het enige verschil is dat je in de console app een int main () hebt, terwijl je voor de windows app een int WINAPI WinMain (HINSTANCE, HINSTANCE, LPSTR, int) hebt

Als die moeilijkheid 'm zit in het verkrijgen van je HINSTANCE: gebruik GetModuleHandle (NULL)

[ Voor 49% gewijzigd door .oisyn op 11-05-2004 14:29 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Nou, bij mij werkt het dus niet goed (oke, 'k ben misschen wel ff dom bezig in deze thread, maar oke).
Mijn code zal ik wel ff erbij zetten zodra ik thuis ben (over een uur of 2).

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:56

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik had het trouwens over native win32, gebruik je VCL? Daar heb ik geen ervaring mee, maar misschien dat het dan anders is. Je kunt het ook andersom aanpakken: maak een gewone GUI app, en koppel daar een console aan (ja dat kan ook ;))

Met AllocConsole () maak je een console aan. Het punt is alleen dat de standaard input en output nog niet naar die console gaan. Echter, de bestandsnamen "CONIN$" en "CONOUT$" wijzen naar deze streams, dus als je freopen () aanroept met stdin en stdout als streams, en die 2 bestandsnamen als de bestanden, dan koppel je stdin en stdout dus aan de console. Onder VC++ zorgt dit er ook voor dat de C++ streams ook gebruik maken van de console, misschien dat dat met de implementatie van Borland anders is; in dat geval kun je gewoon een fstream openen, en de streambuf daarvan toe te kennen aan std::cin en std::cout (met de rdbuf () functie)

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// maak een console
AllocConsole ();

// verbind de standaard in/output aan deze console
freopen ("CONIN$", "r", stdin);
freopen ("CONOUT$", "w", stdout);

// en evt. voor de error stream:
freopen ("CONOUT$", "w", stderr);


// als je de C++ streams apart wilt koppelen:
std::cin.rdbuf (new std::filebuf ()->open ("CONIN$", std::ios::in));
std::cout.rdbuf (new std::filebuf ()->open ("CONOUT$", std::ios::out));
std::cerr.rdbuf (new std::filebuf ()->open ("CONOUT$", std::ios::out));

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:56

.oisyn

Moderator Devschuur®

Demotivational Speaker

* bump *
ga je nog code posten? Ben wel benieuwd naar het preciese probleem namelijk ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1