Page 3 of 3

Re: OpenGL 3.3 Base (windows)

Posted: Thu Jan 24, 2019 11:07 pm
by ymerdy
Hello,

I have the same request than Luis, can anyone post a valid link pleeeeeeeease?

thank you!

Re: OpenGL 3.3 Base (windows)

Posted: Fri Jan 25, 2019 7:58 pm
by luis
Sent through PM.

Re: OpenGL 3.3 Base (windows)

Posted: Fri Jan 25, 2019 11:56 pm
by Mistrel
I would like a copy too, please. :)

Re: OpenGL 3.3 Base (windows)

Posted: Sat Jan 26, 2019 12:26 am
by Mijikai
Also interested 8)

Re: OpenGL 3.3 Base (windows)

Posted: Sat Jan 26, 2019 12:33 am
by luis
http://luis.no-ip.net/purebasic/forum/pbgl.zip

Will be removed in a few days ...

If I recall correctly not everything work out of the box, some fiddling is required.

Re: OpenGL 3.3 Base (windows)

Posted: Sat Jan 26, 2019 10:19 am
by Mijikai
@luis thank you :)

Re: OpenGL 3.3 Base (windows)

Posted: Sun Jan 27, 2019 6:49 am
by Olliv
I took too? Thank you.

I add this good c graphic overview :
http://www.songho.ca/opengl/index.html

Re: OpenGL 3.3 Base (windows)

Posted: Mon Feb 18, 2019 12:56 pm
by Skiller
Hi luis,

unfortunately I missed the brief chance to get a copy of the code including necessaray structures, etc.
Following the OpenGL tutorial recommended in other forum posts (from DarkDragon), I made it all the way through creating VAOs, VBOs, EBOs as well as textures using the afore-mentioned and uniform values in shaders.

Tutorial: https://learnopengl.com/

Trying to get into matrix calculation (rotate and translate) I'm kind of lost and am happy to have found this thread. Is there a chance to receive a complete copy of the code to fill the gaps, please? I'd appreciate it very much!

That's how far I've come in applying textures to a simple rectangle (made up of 2 triangles) and changing transparency (up/down) as well as size (left/right).

Code: Select all

;wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
; structures 
;wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

Global points_vbo.i, colors_vbo.i, vao.i, ebo.i, texture.i, transparenz.f


Structure s_positions
  x.f
  y.f
  z.f
EndStructure

Structure s_colors
  r.f
  g.f
  b.f
EndStructure

Structure s_texture
  x.f
  y.f
EndStructure


Structure s_obj
  Pos.s_positions
  Col.s_colors
  Tex.s_texture
EndStructure


Structure Tindex
  a.l
  b.l
  c.l
EndStructure


;wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
; Identity Matrix
;wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

Dim ourTransform.f(3,3)
ourTransform(0,0)=1   :  ourTransform(0,1)=0  :   ourTransform(0,2)=0   :   ourTransform(0,3)=0 ;// first column
ourTransform(1,0)=0   :  ourTransform(1,1)=1  :   ourTransform(1,2)=0   :   ourTransform(1,3)=0 ;// second column
ourTransform(2,0)=0   :  ourTransform(2,1)=0  :   ourTransform(2,2)=1   :   ourTransform(2,3)=0 ; // third column
ourTransform(3,0)=0   :  ourTransform(3,1)=0  :   ourTransform(3,2)=0   :   ourTransform(3,3)=1 ;// fourth column


;wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
; vertex and index Arrays (Koordianten, Colors und Texture-Location) 
;wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww


Global Dim Vertex.s_obj(4)

;// top right
Vertex(0)\Pos\x = 0.5   : Vertex(0)\Pos\y = 0.5   : Vertex(0)\Pos\z = 0.0
Vertex(0)\Col\r = 1.0   : Vertex(0)\Col\g = 0.0   : Vertex(0)\Col\b = 0.0
Vertex(0)\Tex\x = 1.0   : Vertex(0)\Tex\y = 1.0

; // bottom right
Vertex(1)\Pos\x = 0.5   : Vertex(1)\Pos\y = -0.5  : Vertex(1)\Pos\z = 0.0   
Vertex(1)\Col\r = 0.0   : Vertex(1)\Col\g = 1.0   : Vertex(1)\Col\b = 0.0   
Vertex(1)\Tex\x = 1.0   : Vertex(1)\Tex\y = 0.0

; // bottom left 
Vertex(2)\Pos\x = -0.5  : Vertex(2)\Pos\y = -0.5  : Vertex(2)\Pos\z = 0.0
Vertex(2)\Col\r = 0.0   : Vertex(2)\Col\g = 0.0   : Vertex(2)\Col\b = 1.0 
Vertex(2)\Tex\x = 0.0   : Vertex(2)\Tex\y = 0.0

; // top left 
Vertex(3)\Pos\x = -0.5  : Vertex(3)\Pos\y = 0.5  : Vertex(3)\Pos\z = 0.0
Vertex(3)\Col\r = 1.0   : Vertex(3)\Col\g = 1.0  : Vertex(3)\Col\b = 0.0 
Vertex(3)\Tex\x = 0.0   : Vertex(3)\Tex\y = 1.0


Global Dim Index.Tindex(2)

Index(0)\a = 0  : Index(0)\b = 1  : Index(0)\c = 3     ; // first triangle
Index(1)\a = 1  : Index(1)\b = 2  : Index(1)\c = 3     ; // second triangle


;wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
; pics for textures
;wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

UseJPEGImageDecoder()
UsePNGImageDecoder()

#ImagePath1 = #PB_Compiler_Home + "examples/3d/Data/Textures/"
LoadImage(1, #ImagePath1+"ValetCoeur.jpg") ;ValetCoeur.jpg")
*Buffer1 = EncodeImage(1)


#ImagePath2 = #PB_Compiler_Home + "examples/3d/Data/Textures/"
LoadImage(2, #ImagePath1+"smoke2.png")
*Buffer2 = EncodeImage(2)

transparenz.f = 0.0
Global minTransparenz.f = 0.0
Global maxTransparenz.f = 1.0

;**************************************************************************************

OpenWindow(0, 0, 0, 800, 600, "Tutorial Phase 7 - mehrere Texturen ")
OpenGLGadget(0, 10, 10, WindowWidth(0) , WindowHeight(0) , #PB_OpenGL_Keyboard)

;**************************************************************************************
IncludeFile "mypath\OpenGL_INCLUDE\Functions.pbi" 
IncludeFile "mypath\OpenGL_INCLUDE\GLEXT.pbi"
;**************************************************************************************

glViewport_(0, 0, WindowWidth(0), WindowHeight(0))
glEnable_(#GL_DEPTH_TEST); // enable depth-testing


glGenVertexArrays (1, @vao)  
glGenBuffers(1, @points_vbo ) 
glGenBuffers(1, @ebo)        

glBindVertexArray(vao)

glBindBuffer(#GL_ARRAY_BUFFER, points_vbo)
glBufferData(#GL_ARRAY_BUFFER,32 * ArraySize(Vertex()),@Vertex(0), #GL_STATIC_DRAW)  

glBindBuffer(#GL_ELEMENT_ARRAY_BUFFER, ebo) 
glBufferData(#GL_ELEMENT_ARRAY_BUFFER, 12*ArraySize(Index()), @Index(0), #GL_STATIC_DRAW)

; position attribute
glVertexAttribPointer(0, 3, #GL_FLOAT, #GL_FALSE, 8 * SizeOf(float), 0)
glEnableVertexAttribArray(0)     

; color attribute  
glVertexAttribPointer(1, 3, #GL_FLOAT, #GL_FALSE, 8 * SizeOf(float), 3 * SizeOf(float))
glEnableVertexAttribArray(1)      

; Texture Coords attribute
glVertexAttribPointer(2, 2, #GL_FLOAT, #GL_FALSE, 8 * SizeOf(float), 6 * SizeOf(float))
glEnableVertexAttribArray(2); 


; Textur 1
glGenTextures_(1, @texture1)
glBindTexture_(#GL_TEXTURE_2D, texture1)
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_WRAP_S, #GL_CLAMP_TO_EDGE)
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_WRAP_T, #GL_CLAMP_TO_EDGE)
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MIN_FILTER, #GL_LINEAR)
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MAG_FILTER, #GL_LINEAR)
glTexImage2D_(#GL_TEXTURE_2D, 0, #GL_RGB, ImageWidth(1), ImageHeight(1), 0, #GL_BGR_EXT, #GL_UNSIGNED_BYTE, *Buffer1)
 ;glGenerateMipmap_(#GL_TEXTURE_2D)
FreeMemory(*Buffer1)

; Textur 2
glGenTextures_(2, @texture2)
glBindTexture_(#GL_TEXTURE_2D, texture2)
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_WRAP_S, #GL_REPEAT)
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_WRAP_T, #GL_REPEAT)
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MIN_FILTER, #GL_LINEAR)
glTexParameteri_(#GL_TEXTURE_2D, #GL_TEXTURE_MAG_FILTER, #GL_LINEAR)
glTexImage2D_(#GL_TEXTURE_2D, 0, #GL_RGB, ImageWidth(2), ImageHeight(2), 0, #GL_BGR_EXT, #GL_UNSIGNED_BYTE, *Buffer2)
 ;glGenerateMipmap_(#GL_TEXTURE_2D)
FreeMemory(*Buffer2)


;wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
; prepare shaders
;wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

Define vertex_shader.s
Define fragment_shader.s
Define *fbuff
Define *vbuff


vertex_shader = "#version 330 core"+#CRLF$
vertex_shader + "layout(location = 0) in vec3 aPos;"+#CRLF$             ; the position variable has attribute position 0
vertex_shader + "layout(location = 1) in vec3 aColor;"+#CRLF$           ; the color variable has attribute position 1
vertex_shader + "layout(location = 2) in vec2 aTexCoord;"+#CRLF$        ; the color variable has attribute position 1
vertex_shader + "out vec3 ourColor;"+#CRLF$
vertex_shader + "out vec2 TexCoord;"+#CRLF$
vertex_shader + "uniform mat4 ourTransform;"+#CRLF$
vertex_shader + "void main() {"+#CRLF$
vertex_shader + "gl_Position = vec4(aPos, 1.0);"+#CRLF$
vertex_shader + "gl_Position = ourTransform * vec4(aPos, 1.0);"+#CRLF$
vertex_shader + "ourColor = aColor;"+#CRLF$
vertex_shader + "TexCoord = aTexCoord;"+#CRLF$
vertex_shader + "}"


fragment_shader = "#version 330 core"+#CRLF$
fragment_shader + "out vec4 FragColor;"+#CRLF$
fragment_shader + "in vec3 ourColor;"+#CRLF$
fragment_shader + "in vec2 TexCoord;"+#CRLF$
fragment_shader + "uniform float transparenz;"+#CRLF$
fragment_shader + "uniform sampler2D texture1;"+#CRLF$
fragment_shader + "uniform sampler2D texture2;"+#CRLF$

fragment_shader + "void main()"+#CRLF$
fragment_shader + "{"+#CRLF$
fragment_shader + "   FragColor = mix(texture(texture1, TexCoord), texture(texture2, TexCoord), transparenz);"+#CRLF$
;fragment_shader + "   FragColor = texture(texture2, TexCoord);"+#CRLF$
fragment_shader + "}"+#CRLF$

*vbuff = Ascii(vertex_shader)
*fbuff = Ascii(fragment_shader)


Global vs = glCreateShader(#GL_VERTEX_SHADER);
glShaderSource(vs, 1, @*vbuff, #Null) ;
glCompileShader(vs)

Global fs = glCreateShader(#GL_FRAGMENT_SHADER);
glShaderSource(fs, 1, @*fbuff, #Null);
glCompileShader(fs)  


;wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
; create shader program
;wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

Global shader_programme = glCreateProgram();
glAttachShader(shader_programme, vs)
glAttachShader(shader_programme, fs)
glLinkProgram(shader_programme)     

glDeleteShader(vs)
glDeleteShader(fs)

;wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
; fixed uniform values for shader
;wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
    

glUseProgram(shader_programme)  ; // don't forget to activate/use the shader before setting uniforms!
glUniform1i(glGetUniformLocation(shader_programme, "texture1"), 0)  ; muss nur einmal festgelegt werden
glUniform1i(glGetUniformLocation(shader_programme, "texture2"), 1)  ; die 1 hinten ist wichtig, sonst wird nur die erste Textur genommen!


;wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
; render loop
;wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww


SetActiveGadget(0)  ; make the openGLgadget active so the keyboard can be used with it

   Repeat 
     Event = WaitWindowEvent()
     If Event = #PB_Event_Gadget And EventGadget() = 0
        If EventType() = #PB_EventType_KeyDown 
            key = GetGadgetAttribute(0,#PB_OpenGL_Key )
            
            Select key 
              Case  #PB_Shortcut_Up
                If transparenz < 1
                  transparenz = transparenz + 0.01
                EndIf
              Case  #PB_Shortcut_Down
                If transparenz > 0 
                  transparenz = transparenz - 0.01
                EndIf
              Case  #PB_Shortcut_Left
                ourTransform(3,3) + 0.01
              Case  #PB_Shortcut_Right 
                ourTransform(3,3) - 0.01 
              Case  #PB_Shortcut_W; display wire Frame or solid frame
                If fill = 0
                  glPolygonMode_(#GL_FRONT_AND_BACK, #GL_LINE )
                  fill = 1
                Else
                  glPolygonMode_(#GL_FRONT_AND_BACK, #GL_FILL)
                  fill = 0
                EndIf
              Case  #PB_Shortcut_Escape ;  Esc key to exit
                quit = 1      
            EndSelect
          EndIf
        EndIf
        
;**************************************************************************************  
        
  glClearColor_(0.5, 0.5, 0.3, 1.0)
  glClear_(#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT)
  glViewport_(0, 0, 800, 600)  
  
  glActiveTexture(#GL_TEXTURE0);
  glBindTexture_(#GL_TEXTURE_2D, texture1)
  glActiveTexture(#GL_TEXTURE1)
  glBindTexture_(#GL_TEXTURE_2D, texture2)
  
;wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
; dynamic uniform values für shader
;wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
  
  glUseProgram(shader_programme)  
  glUniform1f(glGetUniformLocation(shader_programme, "transparenz"), transparenz) 
  glUniformMatrix4fv(glGetUniformLocation(shader_programme, "ourTransform"), 1, #GL_FALSE, @ourTransform(0,0));
  
;************************************************************************************** 
  
  glBindVertexArray(vao)
  glDrawElements_(#GL_TRIANGLES, 6, #GL_UNSIGNED_INT, 0 )                                   
   SetGadgetAttribute(0, #PB_OpenGL_FlipBuffers, #True)
  Delay(16)
 
Until Event = #PB_Event_CloseWindow Or quit = 1
Thx skiller

Re: OpenGL 3.3 Base (windows)

Posted: Mon Feb 18, 2019 3:20 pm
by luis
@Skiller

Uploaded again. I just removed it. :lol:
Will be deleted soon and I will never upload it again in my life.
So people interested in it or willing to mirror it or whatever please grab it.

Re: OpenGL 3.3 Base (windows)

Posted: Mon Feb 18, 2019 4:10 pm
by Skiller
Thanks a lot, luis! I really appreciate that and hope everyone who'll ever need this grabs it this instant. :-)

Re: OpenGL 3.3 Base (windows)

Posted: Thu Feb 21, 2019 10:58 pm
by andrewroom
Im so interested in luis pbgl.zip-file.

Can anybody please send me this file!

Thx.

Andrew

Re: OpenGL 3.3 Base (windows)

Posted: Sat Feb 23, 2019 1:13 am
by Mijikai