GLBasic forum

Other languages => GLBasic - de => Topic started by: Schranz0r on 2009-Mar-31

Title: Shader in einem normalen OpenGL C++ Projekt, wie?
Post by: Schranz0r on 2009-Mar-31
Hi,

Weiss einer wie man einen Shader(Fragment, Vertex) in ein OpenGL Projekt einbindet?
Hab schon Google gequ?lt, aber werd da nicht so ganz schlau draus...
Brauch man glut?
Title: Re: Shader in einem normalen OpenGL C++ Projekt, wie?
Post by: Quentin on 2009-Mar-31
vielleicht hilf dir das hier weiter

http://wiki.delphigl.com/index.php/Tutorial#Shader

will auch schon die ganze Zeit mal ein wenig damit rumspielen, komme aber nicht dazu
Title: Re: Shader in einem normalen OpenGL C++ Projekt, wie?
Post by: Schranz0r on 2009-Mar-31
Auf der Seite, war ich schon.
Na, nur das:
Code (glbasic) Select

glAttachObjectARB(ProgramObject, VertexShaderObject);
glAttachObjectARB(ProgramObject, FragmentShaderObject);

gibts z.B schonmal net im OpenGL-Wrapper von GLB, sonst h?tt ichs da mal gestet...


:|
Title: Re: Shader in einem normalen OpenGL C++ Projekt, wie?
Post by: Quentin on 2009-Mar-31
die brauchst du ja auch nicht. Das sollten die neuen SHADER-Befehle von GLBasic alles erledigen. Brauchst ja nur den Shader zu erstellen (vert und/oder frag) und zu nutzen.
Title: Re: Shader in einem normalen OpenGL C++ Projekt, wie?
Post by: Schranz0r on 2009-Mar-31
Nur das du keine Parameter ?bergeben kannst.
GLB hat Max 2 Texturen, sonst muss man das im Shader fix machen.
Title: Re: Shader in einem normalen OpenGL C++ Projekt, wie?
Post by: Quentin on 2009-Mar-31
hmm, da bin ich leicht ?berfragt. M?sstest dann wohl GL-Extensions nutzen. Aber sind die nicht Hersteller-spezifisch?

Joachim Rohde hat die Nehe-OpenGL-Tutorials ja gr??tenteils in Deutsche ?bersetzt
vielleicht hilft das weiter. Hier der Artikel f?r Multi-Texturing

http://www.joachimrohde.com/cms/xoops/modules/articles/article.php?id=30
Title: Re: Shader in einem normalen OpenGL C++ Projekt, wie?
Post by: Schranz0r on 2009-Mar-31
das wenn ich schon sehe :D :
Code (glbasic) Select
#include < windows.h> // Header Datei f?r Windows
#include < stdio.h> // Header Datei f?r Standard Input/Output
#include < gl\gl.h> // Header Datei f?r die OpenGL32 Library
#include < gl\glu.h> // Header Datei f?r die GLu32 Library
#include < gl\glaux.h> // Header Datei f?r die GLaux Library
#include "glext.h" // Header Datei f?r Multitexturing
#include < string.h> // Header Datei f?r die String Library
#include < math.h> // Header Datei f?r die Math Library


haste in GLB keine Chance
Title: Re: Shader in einem normalen OpenGL C++ Projekt, wie?
Post by: Kitty Hello on 2009-Apr-01
Laaaaangsam!

X_LOADSHADER -> glCreateShaderObjectArb, glShaderSourceArb, glCompileShaderArb, glGetObjectParameterivArb(GL_OBJECT_COMPILE_STATUS_ARB), glLinkProgramArb

X_SETSHADER -> glUseProgramObjectArb

X_PUTSHADER -> glGetUniformLocationArb, glUniform1fArb

Das ist _ALLES_ gewrapped!
Title: Re: Shader in einem normalen OpenGL C++ Projekt, wie?
Post by: Schranz0r on 2009-Apr-01
dann schau mal in die gl.gbas :)

glCreateShaderObjectArb ... nicht anwesend
glShaderSourceArb  ... hat sich auch verlaufen
glGetObjectParameterivArb(GL_OBJECT_COMPILE_STATUS_ARB) ... n??
glLinkProgramArb... auch nicht da
glUseProgramObjectArb... nix da..
glGetUniformLocationArb... weg
glUniform1fArb ... net da


hab die gl.gbas von der Startseite von hier!
Shader wurde da ausgelassen?
Oder ist das Intern vorhanden, ohne das ich das wei? o.O
Kann ich da Zugriff bekommen zu diesen Befehlen?
Title: Re: Shader in einem normalen OpenGL C++ Projekt, wie?
Post by: Kitty Hello on 2009-Apr-01
Das sind Extensions. Die m?sst Du extra laden. Das ist der totale Krampf. Warum nicht X_SETSHADER nutzen?
Title: Re: Shader in einem normalen OpenGL C++ Projekt, wie?
Post by: Schranz0r on 2009-Apr-02
Naja so kann man ja Parameter an einen Shader "?bergeben"...

Kann X_PUTSHADER wohl auch, aber k?nnte man auch irgendwie Texturen f?r einen Shader setzen?
Oder einen Texturnamen an einen Shader .. oder so :D
Title: Re: Shader in einem normalen OpenGL C++ Projekt, wie?
Post by: Kitty Hello on 2009-Apr-02
Ja klar. Du gibtst Ja nur die TexturNUMMER an. Das geht mit X_PUTSHADER.

STOP. Alles zur?ck. Ich hab das vergessen zu dokumentieren.
Schau in das Vz Samples\3D\Shader
Die Datei: Multitexture.frag

Code (glbasic) Select

// GLBasic exports 2 "uniform sampler2D" variables if
// you set X_SETTEXTURE a,b after X_SETSHADER!
uniform sampler2D TextureID1;
uniform sampler2D TextureID2;


Du setzt die Textur also mit X_SETTEXTURE und der Wert "TextureID1" und "TextureID2" sind deine Texturen.

Title: Re: Shader in einem normalen OpenGL C++ Projekt, wie?
Post by: Schranz0r on 2009-Apr-02
Angenommen ich h?tte mehr als 2 Texturen? ( Heightmap je nach h?he kommt die Textur ... < 0 unterwasser,  bis 100 Gras, > 100 Schnee)

Geht das dann einfach eine 3te Textur ?ber Putshader zu machen... n? oder?
Geht jetzt rein ums verst?ndnis :)
Title: Re: Shader in einem normalen OpenGL C++ Projekt, wie?
Post by: Kitty Hello on 2009-Apr-02
Nein, dann INLINE.