MiniB3d for FreeBasic
-
- Posts: 8586
- Joined: May 28, 2005 3:28
- Contact:
Re: MiniB3d for FreeBasic
Why do you use on PC OpenGL >=3.0 FrameBuffer and not the OpenGL 2.0 DepthTexture instead ?
you need it only if GLES2 are defined
I ask only for info I self don't need it since fbgxf create a 3.0 render context ?
Joshy
you need it only if GLES2 are defined
I ask only for info I self don't need it since fbgxf create a 3.0 render context ?
Joshy
Re: MiniB3d for FreeBasic
Are you referring to something in the postfx module, or in the texture module?
I am not sure I understand which >=3.0 feature are you talking about
I am not sure I understand which >=3.0 feature are you talking about
-
- Posts: 8586
- Joined: May 28, 2005 3:28
- Contact:
Re: MiniB3d for FreeBasic
So far I know for example glGenFramebuffers() is OpenGL ES2.0/3.0 and OpenGL >= 3.0 but not OpenGL 2.0 ?
Joshy
edit: OK I saw you don't check the version of running OpenGL you used gLee instead.
Your lib use ARB_framebuffer_object or EXT_framebuffer_object if OpenmGL<3.0
Joshy
edit: OK I saw you don't check the version of running OpenGL you used gLee instead.
Your lib use ARB_framebuffer_object or EXT_framebuffer_object if OpenmGL<3.0
Re: MiniB3d for FreeBasic
I ported the code from MiniB3D, that used glee. Then, when I added the rendering to texture, I found, of several tutorials, the suggestion to use framebuffers as the most modern and efficient solution, and since such an implementation worked (it even works if compiled with Emscripten), I didn't look for other solutions. How would you have implemented it, using OpenGL2 features?
-
- Posts: 8586
- Joined: May 28, 2005 3:28
- Contact:
Re: MiniB3d for FreeBasic
I hope I don't waste your time i'm currently a little bit confuse :-)
if glGetString(GL_VERSION) reports "3.0" or higher that means glGenFramebuffers are implented as a standard
AND ONLY if the OpenGL context are created with an OpenGL profile 3.0 or higher you can use:
dim as GLInt FBO
glGenFramebuffers(1,@FBO)
If for example the OpenGL version is 1.4 or 2.0 but "GL_EXT_framebuffer_object" are reported as an extenmsion you can use:
dim as GLInt FBO
glGenFramebuffersEXT(1,@FBO)
Can you point me in the right direction why your code works with an none OpenGL 3.0 profile created by FBGFX ?
Do you ever tested OpenB3D with an older gfx card or with an older OpenGL driver ?
glGenFramebuffers needs OpenGL 3.0 or OpenGL ES2.0
OpenGL 3.0 : https://www.khronos.org/registry/OpenGL ... fers.xhtml
OpenGL ES 2.0 : https://www.khronos.org/registry/OpenGL ... uffers.xml
As an fallback the extension "GL_EXT_framebuffer_object"
glGenFramebuffersEXT: https://www.khronos.org/registry/OpenGL ... object.txt
Thank you
Joshy
if glGetString(GL_VERSION) reports "3.0" or higher that means glGenFramebuffers are implented as a standard
AND ONLY if the OpenGL context are created with an OpenGL profile 3.0 or higher you can use:
dim as GLInt FBO
glGenFramebuffers(1,@FBO)
If for example the OpenGL version is 1.4 or 2.0 but "GL_EXT_framebuffer_object" are reported as an extenmsion you can use:
dim as GLInt FBO
glGenFramebuffersEXT(1,@FBO)
Can you point me in the right direction why your code works with an none OpenGL 3.0 profile created by FBGFX ?
Do you ever tested OpenB3D with an older gfx card or with an older OpenGL driver ?
glGenFramebuffers needs OpenGL 3.0 or OpenGL ES2.0
OpenGL 3.0 : https://www.khronos.org/registry/OpenGL ... fers.xhtml
OpenGL ES 2.0 : https://www.khronos.org/registry/OpenGL ... uffers.xml
As an fallback the extension "GL_EXT_framebuffer_object"
glGenFramebuffersEXT: https://www.khronos.org/registry/OpenGL ... object.txt
Thank you
Joshy
Re: MiniB3d for FreeBasic
I tested openGL on a laptop built in 2005, that doesn't even support shaders, and has OpenGL 1.4 (I believe). It worked (except the shader part, of course). I don't remember if I had tested rendering on a texture, too, but I think I did. Also, I don't know other methods to render directly on a texture, so when you mentioned rendering on a texture without a framebuffer I wondered what you were talking about.
If your card doesn't support framebuffers at all, in theory it is possible to render on backbuffer, and copy that on the texture: original Blitz3D did that, and even the original MiniB3D, using the command "BackBufferToTex", that is still implemented in OpenB3D, in case you want to try.
FBGFX, in this case is not required to provide support to modern profile, since the profile is used in C++, not in FreeBasic (FreeBasic only creates the window and the context... a bit like the library GLUT); and in C++ the profile and the extensions are provided by GLee (or GLext on Linux)
If your card doesn't support framebuffers at all, in theory it is possible to render on backbuffer, and copy that on the texture: original Blitz3D did that, and even the original MiniB3D, using the command "BackBufferToTex", that is still implemented in OpenB3D, in case you want to try.
FBGFX, in this case is not required to provide support to modern profile, since the profile is used in C++, not in FreeBasic (FreeBasic only creates the window and the context... a bit like the library GLUT); and in C++ the profile and the extensions are provided by GLee (or GLext on Linux)
-
- Posts: 8586
- Joined: May 28, 2005 3:28
- Contact:
Re: MiniB3d for FreeBasic
Looks like you need only for OpenGL 3.2 and higer versions an render context init with an profile.
So glGenFrameBuffers is for example in GLee:
#define glGenFramebuffers glGenFramebuffersEXT
or
#define glGenFramebuffers glGenFramebuffersARB
(*) that makes more sence for me now :-)
For the future ScreenControl GL_SET_PROFILE,XYZ would be an good option.
* I was confused because #define is compile time and not runtime where your code can detect the active OpenGL environment.
So in real it's more complicated glGenFramebuffersEXT or ARB are pointers are set as runtime.
...
Joshy
So glGenFrameBuffers is for example in GLee:
#define glGenFramebuffers glGenFramebuffersEXT
or
#define glGenFramebuffers glGenFramebuffersARB
(*) that makes more sence for me now :-)
For the future ScreenControl GL_SET_PROFILE,XYZ would be an good option.
* I was confused because #define is compile time and not runtime where your code can detect the active OpenGL environment.
So in real it's more complicated glGenFramebuffersEXT or ARB are pointers are set as runtime.
...
Joshy
Last edited by D.J.Peters on Oct 20, 2017 11:50, edited 1 time in total.
Re: MiniB3d for FreeBasic
The official documentation states something similar: https://www.khronos.org/opengl/wiki/Ope ... d_ProfilesD.J.Peters wrote:Looks like you need only for OpenGL 3.1 and higer versions an render context init with an profile.
The 3.0 form of context creation did not have the concept of profiles. There was only one form of OpenGL: the core specification. In 3.2, OpenGL was effectively split into two profiles, core and compatibility. An implementation was only required to define core, so compatibility is not guaranteed to be available. However, on most implementations, the compatibility profile will be available.
-
- Posts: 3906
- Joined: Jan 01, 2009 7:03
- Location: Australia
Re: MiniB3d for FreeBasic
viewtopic.php?t=15409
When I go to,
http://sourceforge.net/projects/minib3d/
All I see is a download for OpenB3D,
I can't find any minib3d.bi in the download.
.
When I go to,
http://sourceforge.net/projects/minib3d/
All I see is a download for OpenB3D,
I can't find any minib3d.bi in the download.
.
Re: MiniB3d for FreeBasic
The old name was MiniB3D (a port of a software for BlitzMax). With time, the library became so different that I changed its name. The file you need to use is OpenB3D.bi
-
- Posts: 3906
- Joined: Jan 01, 2009 7:03
- Location: Australia
Re: MiniB3d for FreeBasic
Thanks.
The example I wanted to run below needs "bird.b3d" but I can't find it?
Also perhaps LoadAnimMesh needs to deal with failure to return a value?
The example I wanted to run below needs "bird.b3d" but I can't find it?
Also perhaps LoadAnimMesh needs to deal with failure to return a value?
Code: Select all
#include "OpenB3D.bi"
#include "fbgfx.bi"
Using FB
Const xres = 1024
Const yres = 768
Screenres xres, yres, 32,, GFX_OPENGL
Graphics3d xres, yres, 32, 1, 1
Var camera=createcamera(0)
CameraViewport(camera,0,0,xres,yres)
Var bird=LoadAnimMesh ("bird.b3d",0)
moveentity bird,0,0,15
animate bird,1,.1,0,0
AmbientLight(0, 255, 255)
Do
EntityAlpha bird, Abs(Cos(Timer))
If Multikey(SC_W) Then turnentity bird, -1, 0, 0, 0
If Multikey(SC_S) Then turnentity bird, 1, 0, 0, 0
If Multikey(SC_A) Then turnentity bird, 0, -1, 0, 0
If Multikey(SC_D) Then turnentity bird, 0, 1, 0, 0
If Multikey(SC_Q) Then turnentity bird, 0, 0, -1, 0
If Multikey(SC_E) Then turnentity bird, 0, 0, 1, 0
If Multikey(SC_RIGHT) Then TranslateEntity bird, 1, 0, 0, 0
If Multikey(SC_LEFT) Then TranslateEntity bird, -1, 0, 0, 0
If Multikey(SC_DOWN) Then TranslateEntity bird, 0, -1, 0, 0
If Multikey(SC_UP) Then TranslateEntity bird, 0, 1, 0, 0
updateworld 1
renderworld
Flip
Loop Until Multikey(SC_ESCAPE)
Re: MiniB3d for FreeBasic
Here is the file: https://files.fm/u/rcs5bdka
-
- Posts: 3906
- Joined: Jan 01, 2009 7:03
- Location: Australia
Re: MiniB3d for FreeBasic
@angros47,
So is Flip required? I usually use screenlock/screenunlock.
I had to slow the key response down with the timer.
I also noticed that the translate made faster changes than the rotates.
So is there any tutorial for learning how to use the library?
The models are made how? By Blender?
Although I have been around a while and I see you began all this some time ago using these extensions to FreeBasic hadn't really interested before so I am completely new to this 3d programming.
.
So is Flip required? I usually use screenlock/screenunlock.
I had to slow the key response down with the timer.
I also noticed that the translate made faster changes than the rotates.
So is there any tutorial for learning how to use the library?
The models are made how? By Blender?
Although I have been around a while and I see you began all this some time ago using these extensions to FreeBasic hadn't really interested before so I am completely new to this 3d programming.
.
Re: MiniB3d for FreeBasic
Flip is required. OpenGl works in a completely different way than normal graphic library, and OpenB3D is based on OpenGl.
Translation, mathematically, requires less calculation than rotation, so it is obviously faster. Most tutorials of Blitz3D can work on OpenB3D, too.
Several 3d softwares can export into .B3D format, blender can, too (it might need a specific plug in, that is just a script, for that)
Translation, mathematically, requires less calculation than rotation, so it is obviously faster. Most tutorials of Blitz3D can work on OpenB3D, too.
Several 3d softwares can export into .B3D format, blender can, too (it might need a specific plug in, that is just a script, for that)
-
- Posts: 8586
- Joined: May 28, 2005 3:28
- Contact:
Re: MiniB3d for FreeBasic
there is an syntax error in shadow.cpp
Joshy
Joshy
Code: Select all
float ShadowObject::light_x;
float ShadowObject::light_y, // << --- must be ";"
float ShadowObject::light_z;