Shader in einem normalen OpenGL C++ Projekt, wie?

Previous topic - Next topic

Schranz0r

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?
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Quentin

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

Schranz0r

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...


:|
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Quentin

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.

Schranz0r

Nur das du keine Parameter ?bergeben kannst.
GLB hat Max 2 Texturen, sonst muss man das im Shader fix machen.
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Quentin

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

Schranz0r

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
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Kitty Hello

Laaaaangsam!

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

X_SETSHADER -> glUseProgramObjectArb

X_PUTSHADER -> glGetUniformLocationArb, glUniform1fArb

Das ist _ALLES_ gewrapped!

Schranz0r

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?
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Kitty Hello

Das sind Extensions. Die m?sst Du extra laden. Das ist der totale Krampf. Warum nicht X_SETSHADER nutzen?

Schranz0r

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
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Kitty Hello

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.


Schranz0r

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 :)
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Kitty Hello