raylib headers
Re: raylib headers
Hey, no prob ;)
Ported the rlights.h header, to port some examples that need it (namely, models_material_pbr.c). However, all I've got was a white screen. So, I tested the C example and alas, same thing. There are other weirdness, too:
FreeBasic port above, original C code below (models_skybox.c). I wonder if the author changed something, and/or the repo I downloaded (2.6) is broken somehow? Mmmm...
Ported also some other 3D examples and they're fine, so I think that the shaders are giving me these results. Can you confirm, please?
Ported the rlights.h header, to port some examples that need it (namely, models_material_pbr.c). However, all I've got was a white screen. So, I tested the C example and alas, same thing. There are other weirdness, too:
FreeBasic port above, original C code below (models_skybox.c). I wonder if the author changed something, and/or the repo I downloaded (2.6) is broken somehow? Mmmm...
Ported also some other 3D examples and they're fine, so I think that the shaders are giving me these results. Can you confirm, please?
Last edited by paul doe on Mar 11, 2020 3:35, edited 1 time in total.
Re: raylib headers
The ported skybox example. Interestingly enough, the grid isn't displayed here:
Code: Select all
/'
********************************************************************************************
*
* raylib [models] example - Skybox loading and drawing
*
* This example has been created using raylib 1.8 (www.raylib.com)
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
*
* Copyright (c) 2017 Ramon Santamaria (@raysan5)
*
********************************************************************************************
'/
#include "../raylib.bi"
const as integer _
screenWidth => 800, _
screenHeight => 450
const as string _
resPath => "../resources/models/"
InitWindow( _
screenWidth, _
screenHeight, _
"raylib [models] example - skybox loading and drawing" )
'' Define the camera to look into our 3d world
dim as Camera _
camera
with camera
.position => Vector3( 1.0!, 1.0!, 1.0! )
.target => Vector3( 4.0!, 1.0!, 4.0! )
.up => Vector3( 0.0!, 1.0!, 0.0! )
.fovy => 45.0!
.type => 0
end with
'' Load skybox model
dim as Mesh _
cube => GenMeshCube( 1.0!, 1.0!, 1.0! )
dim as Model _
skybox => LoadModelFromMesh( cube )
/'
Load skybox shader and set required locations
NOTE: Some locations are automatically set at shader loading
'/
skybox.materials[ 0 ].shader => LoadShader( _
resPath + "shaders/glsl330/skybox.vs", _
resPath + "shaders/glsl330/skybox.fs" )
dim as long _
map => MAP_CUBEMAP
SetShaderValue( _
skybox.materials[ 0 ].shader, _
GetShaderLocation( _
skybox.materials[ 0 ].shader, _
"environmentMap" ), _
@map, UNIFORM_INT )
'' Load cubemap shader and setup required shader locations
dim as Shader _
shdrCubemap => LoadShader( _
resPath + "shaders/glsl330/cubemap.vs", _
resPath + "shaders/glsl330/cubemap.fs" )
dim as long _
zero => 0
SetShaderValue( _
shdrCubemap, _
GetShaderLocation( shdrCubemap, "equirectangularMap" ), _
@zero, UNIFORM_INT )
'' Load HDR panorama (sphere) texture
dim as Texture2D _
texHDR => LoadTexture( resPath + "dresden_square.hdr" )
/'
Generate cubemap (texture with 6 quads-cube-mapping) from panorama HDR texture
NOTE: New texture is generated rendering to texture, shader computes the sphre->cube coordinates mapping
'/
skybox.materials[ 0 ].maps[ MAP_CUBEMAP ].texture => GenTextureCubemap( shdrCubemap, texHDR, 512 )
'' Texture not required anymore, cubemap already generated
UnloadTexture( texHDR )
'' Unload cubemap generation shader, not required anymore
UnloadShader( shdrCubemap )
SetCameraMode( camera, CAMERA_FIRST_PERSON )
SetTargetFPS( 60 )
do while( not WindowShouldClose() )
'' Update
UpdateCamera( @camera )
'' Draw
BeginDrawing()
ClearBackground( RAYWHITE )
BeginMode3D( camera )
DrawModel( skybox, Vector3( 0, 0, 0 ), 1.0!, WHITE )
DrawGrid( 10, 1.0! )
EndMode3D()
DrawFPS( 10, 10 )
EndDrawing()
loop
UnloadShader( skybox.materials[ 0 ].shader )
UnloadTexture( skybox.materials[ 0 ].maps[ MAP_CUBEMAP ].texture )
UnloadModel( skybox )
CloseWindow()
Re: raylib headers
And this is the ported models_material_pbr example:
rlights.bi
It needs the above header to run.
Code: Select all
/'
********************************************************************************************
*
* raylib [models] example - PBR material
*
* This example has been created using raylib 1.8 (www.raylib.com)
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
*
* Copyright (c) 2017 Ramon Santamaria (@raysan5)
*
********************************************************************************************
'/
#include once "../raylib.bi"
#include once "../raymath.bi"
#define RLIGHTS_IMPLEMENTATION
#include "../rlights.bi"
#define CUBEMAP_SIZE 512 '' Cubemap texture size
#define IRRADIANCE_SIZE 32 '' Irradiance texture size
#define PREFILTERED_SIZE 256 '' Prefiltered HDR environment texture size
#define BRDF_SIZE 512 '' BRDF LUT texture size
'' PBR material loading
declare function _
LoadMaterialPBR( _
byref albedo as Color, _
byval metalness as single, _
byval roughness as single ) _
as Material
const as integer _
screenWidth => 800, _
screenHeight => 450
const as string _
resPath => "../resources/models/"
'' Enable Multi Sampling Anti Aliasing 4x (if available)
SetConfigFlags( FLAG_MSAA_4X_HINT )
InitWindow( _
screenWidth, _
screenHeight, _
"raylib [models] example - pbr material" )
'' Define the camera to look into our 3d world
dim as Camera _
camera
with camera
.position => Vector3( 4.0!, 4.0!, 4.0! ) '' Camera position
.target => Vector3( 0.0!, 0.5!, 0.0! ) '' Camera looking at point
.up => Vector3( 0.0!, 1.0!, 0.0! ) '' Camera up vector (rotation towards target)
.fovy => 45.0! '' Camera field-of-view Y
.type => CAMERA_PERSPECTIVE '' Camera mode type
end with
'' Load model and PBR material
dim as Model _
model => LoadModel( resPath + "pbr/trooper.obj" )
/'
Mesh tangents are generated... and uploaded to GPU
NOTE: New VBO for tangents is generated at default location and also binded to mesh VAO
'/
MeshTangents( @model.meshes[ 0 ] )
UnloadMaterial( model.materials[ 0 ] ) '' get rid of default material
model.materials[ 0 ] => LoadMaterialPBR( _
Color( 255, 255, 255, 255 ), 1.0!, 1.0! )
/'
Create lights
NOTE: Lights are added to an internal lights pool automatically
'/
CreateLight( _
LIGHT_POINT, _
Vector3( LIGHT_DISTANCE, LIGHT_HEIGHT, 0.0! ), _
Vector3( 0.0!, 0.0!, 0.0! ), _
Color( 255, 0, 0, 255 ), _
model.materials[ 0 ].shader )
CreateLight( _
LIGHT_POINT, _
Vector3( 0.0!, LIGHT_HEIGHT, LIGHT_DISTANCE ), _
Vector3( 0.0!, 0.0!, 0.0! ), _
Color( 0, 255, 0, 255 ), _
model.materials[ 0 ].shader )
CreateLight( _
LIGHT_POINT, _
Vector3( -LIGHT_DISTANCE, LIGHT_HEIGHT, 0.0! ), _
Vector3( 0.0!, 0.0!, 0.0! ), _
Color( 0, 0, 255, 255 ), _
model.materials[ 0 ].shader )
CreateLight( _
LIGHT_DIRECTIONAL, _
Vector3( 0.0!, LIGHT_HEIGHT * 2.0!, -LIGHT_DISTANCE ), _
Vector3( 0.0!, 0.0!, 0.0! ), _
Color( 255, 0, 255, 255 ), _
model.materials[ 0 ].shader )
'' Set an orbital camera mode
SetCameraMode( camera, CAMERA_ORBITAL )
SetTargetFPS( 60 )
do while( not WindowShouldClose() )
UpdateCamera( @camera )
'' Send to material PBR shader camera view position
dim as single _
cameraPos( 0 to 2 ) => { _
camera.position.x, _
camera.position.y, _
camera.position.z }
SetShaderValue( _
model.materials[ 0 ].shader, _
model.materials[ 0 ].shader.locs[ LOC_VECTOR_VIEW ], _
@cameraPos( 0 ), _
UNIFORM_VEC3 )
'' Render
BeginDrawing()
ClearBackground( RAYWHITE )
BeginMode3D( camera )
DrawModel( model, Vector3Zero(), 1.0!, WHITE )
DrawGrid( 10, 1.0! )
EndMode3D()
DrawFPS( 10, 10 )
EndDrawing()
loop
'' Shaders and textures must be unloaded by user,
'' they could be in use by other models
with model
UnloadTexture( .materials[ 0 ].maps[ MAP_ALBEDO ].texture )
UnloadTexture( .materials[ 0 ].maps[ MAP_NORMAL ].texture )
UnloadTexture( .materials[ 0 ].maps[ MAP_METALNESS ].texture )
UnloadTexture( .materials[ 0 ].maps[ MAP_ROUGHNESS ].texture )
UnloadTexture( .materials[ 0 ].maps[ MAP_OCCLUSION ].texture )
UnloadTexture( .materials[ 0 ].maps[ MAP_IRRADIANCE ].texture )
UnloadTexture( .materials[ 0 ].maps[ MAP_PREFILTER ].texture )
UnloadTexture( .materials[ 0 ].maps[ MAP_BRDF ].texture )
UnloadShader( .materials[ 0 ].shader )
end with
UnloadModel(model)
CloseWindow()
/'
Load PBR material (Supports: ALBEDO, NORMAL, METALNESS, ROUGHNESS, AO, EMMISIVE, HEIGHT maps).
NOTE: PBR shader is loaded inside this function.
'/
function _
LoadMaterialPBR( _
byref albedo as Color, _
byval metalness as single, _
byval roughness as single ) _
as Material
'' Initialize material to default
dim as Material _
mat
mat => LoadMaterialDefault()
#if defined( PLATFORM_DESKTOP )
mat.shader => LoadShader( _
resPath + "shaders/glsl330/pbr.vs", _
resPath + "shaders/glsl330/pbr.fs" )
#else '' PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB
mat.shader => LoadShader( _
resPath + "shaders/glsl100/pbr.vs", _
resPath + "shaders/glsl100/pbr.fs" )
#endif
/'
Get required locations points for PBR material.
NOTE: Those location names must be available and used in the shader code.
'/
with mat.shader
.locs[ LOC_MAP_ALBEDO ] => GetShaderLocation( mat.shader, "albedo.sampler" )
.locs[ LOC_MAP_METALNESS ] => GetShaderLocation( mat.shader, "metalness.sampler" )
.locs[ LOC_MAP_NORMAL ] => GetShaderLocation( mat.shader, "normals.sampler" )
.locs[ LOC_MAP_ROUGHNESS ] => GetShaderLocation( mat.shader, "roughness.sampler" )
.locs[ LOC_MAP_OCCLUSION ] => GetShaderLocation( mat.shader, "occlusion.sampler" )
.locs[ LOC_MAP_IRRADIANCE ] => GetShaderLocation( mat.shader, "irradianceMap" )
.locs[ LOC_MAP_PREFILTER ] => GetShaderLocation( mat.shader, "prefilterMap" )
.locs[ LOC_MAP_BRDF ] => GetShaderLocation( mat.shader, "brdfLUT" )
'' Set view matrix location
.locs[ LOC_MATRIX_MODEL ] => GetShaderLocation( mat.shader, "matModel" )
.locs[ LOC_VECTOR_VIEW ] => GetShaderLocation( mat.shader, "viewPos" )
end with
'' Set PBR standard maps
with mat
.maps[ MAP_ALBEDO ].texture => LoadTexture( _
resPath + "pbr/trooper_albedo.png" )
.maps[ MAP_NORMAL ].texture => LoadTexture( _
resPath + "pbr/trooper_normals.png" )
.maps[ MAP_METALNESS ].texture => LoadTexture( _
resPath + "pbr/trooper_metalness.png" )
.maps[ MAP_ROUGHNESS ].texture => LoadTexture( _
resPath + "pbr/trooper_roughness.png" )
.maps[ MAP_OCCLUSION ].texture => LoadTexture( _
resPath + "pbr/trooper_ao.png" )
end with
'' Load equirectangular to cubemap shader
#if defined( PLATFORM_DESKTOP )
dim as Shader _
shdrCubemap => LoadShader( _
resPath + "shaders/glsl330/cubemap.vs", _
resPath + "shaders/glsl330/cubemap.fs" )
#else '' PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB
dim as Shader _
shdrCubemap => LoadShader( _
resPath + "shaders/glsl100/cubemap.vs", _
resPath + "shaders/glsl100/cubemap.fs" )
#endif
'' Load irradiance (GI) calculation shader
#if defined( PLATFORM_DESKTOP )
dim as Shader _
shdrIrradiance => LoadShader( _
resPath + "shaders/glsl330/skybox.vs", _
resPath + "shaders/glsl330/irradiance.fs" )
#else '' PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB
dim as Shader _
shdrIrradiance => LoadShader( _
resPath + "shaders/glsl100/skybox.vs", _
resPath + "shaders/glsl100/irradiance.fs" )
#endif
'' Load reflection prefilter calculation shader
#if defined( PLATFORM_DESKTOP )
dim as Shader _
shdrPrefilter => LoadShader( _
resPath + "shaders/glsl330/skybox.vs", _
resPath + "shaders/glsl330/prefilter.fs" )
#else
dim as Shader _
shdrPrefilter => LoadShader( _
resPath + "shaders/glsl100/skybox.vs", _
resPath + "shaders/glsl100/prefilter.fs" )
#endif
'' Load bidirectional reflectance distribution function shader
#if defined( PLATFORM_DESKTOP )
dim as Shader _
shdrBRDF => LoadShader( _
resPath + "shaders/glsl330/brdf.vs", _
resPath + "shaders/glsl330/brdf.fs" )
#else
dim as Shader _
shdrBRDF => LoadShader( _
resPath + "shaders/glsl100/brdf.vs", _
resPath + "shaders/glsl100/brdf.fs" )
#endif
dim as long _
zero => 0, _
one => 1
'' Setup required shader locations
SetShaderValue( _
shdrCubemap, GetShaderLocation( _
shdrCubemap, "equirectangularMap" ), _
@zero, UNIFORM_INT)
SetShaderValue( _
shdrIrradiance, GetShaderLocation( _
shdrIrradiance, "environmentMap" ), _
@zero, UNIFORM_INT)
SetShaderValue( _
shdrPrefilter, GetShaderLocation( _
shdrPrefilter, "environmentMap" ), _
@zero, UNIFORM_INT )
dim as Texture2D _
texHDR => LoadTexture( resPath + "dresden_square.hdr" )
dim as Texture2D _
cubemap => GenTextureCubemap( _
shdrCubemap, texHDR, CUBEMAP_SIZE )
with mat
.maps[ MAP_IRRADIANCE ].texture => GenTextureIrradiance( _
shdrIrradiance, cubemap, IRRADIANCE_SIZE )
.maps[ MAP_PREFILTER ].texture => GenTexturePrefilter( _
shdrPrefilter, cubemap, PREFILTERED_SIZE )
.maps[ MAP_BRDF ].texture => GenTextureBRDF( _
shdrBRDF, BRDF_SIZE )
end with
UnloadTexture( cubemap )
UnloadTexture( texHDR )
'' Unload already used shaders (to create specific textures)
UnloadShader( shdrCubemap )
UnloadShader( shdrIrradiance )
UnloadShader( shdrPrefilter )
UnloadShader( shdrBRDF )
with mat
'' Set textures filtering for better quality
SetTextureFilter( _
.maps[ MAP_ALBEDO ].texture, FILTER_BILINEAR )
SetTextureFilter( _
.maps[ MAP_NORMAL ].texture, FILTER_BILINEAR )
SetTextureFilter( _
.maps[ MAP_METALNESS ].texture, FILTER_BILINEAR )
SetTextureFilter( _
.maps[ MAP_ROUGHNESS ].texture, FILTER_BILINEAR )
SetTextureFilter( _
.maps[ MAP_OCCLUSION ].texture, FILTER_BILINEAR )
'' Enable sample usage in shader for assigned textures
SetShaderValue( _
.shader, GetShaderLocation( _
.shader, "albedo.useSampler" ), _
@one, UNIFORM_INT )
SetShaderValue( _
.shader, GetShaderLocation( _
.shader, "normals.useSampler" ), _
@one, UNIFORM_INT )
SetShaderValue( _
.shader, GetShaderLocation( _
.shader, "metalness.useSampler" ), _
@one, UNIFORM_INT )
SetShaderValue( _
.shader, GetShaderLocation( _
.shader, "roughness.useSampler" ), _
@one, UNIFORM_INT )
SetShaderValue( _
.shader, GetShaderLocation( _
.shader, "occlusion.useSampler" ), _
@one, UNIFORM_INT)
dim as long _
renderModeLoc => GetShaderLocation( .shader, "renderMode" )
SetShaderValue( _
.shader, renderModeLoc, @zero, UNIFORM_INT )
'' Set up material properties color
.maps[ MAP_ALBEDO ].color => albedo
.maps[ MAP_NORMAL ].color => Color( 128, 128, 255, 255 )
.maps[ MAP_METALNESS ].value => metalness
.maps[ MAP_ROUGHNESS ].value => roughness
.maps[ MAP_OCCLUSION ].value => 1.0!
.maps[ MAP_EMISSION ].value => 0.5!
.maps[ MAP_HEIGHT ].value => 0.5!
end with
return( mat )
end function
Code: Select all
/'
***********************************************************************************************
*
* raylib.lights - Some useful functions to deal with lights data
*
* CONFIGURATION:
*
* #define RLIGHTS_IMPLEMENTATION
* Generates the implementation of the library into the included file.
* If not defined, the library is in header only mode and can be included in other headers
* or source files without problems. But only ONE file should hold the implementation.
*
* LICENSE: zlib/libpng
*
* Copyright (c) 2017 Victor Fisac and Ramon Santamaria
*
* This software is provided "as-is", without any express or implied warranty. In no event
* will the authors be held liable for any damages arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose, including commercial
* applications, and to alter it and redistribute it freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not claim that you
* wrote the original software. If you use this software in a product, an acknowledgment
* in the product documentation would be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not be misrepresented
* as being the original software.
*
* 3. This notice may not be removed or altered from any source distribution.
*
**********************************************************************************************
'/
#ifndef RLIGHTS_H
#define RLIGHTS_H
#include once "raylib.bi"
/'
Defines and Macros
'/
#define MAX_LIGHTS 4 '' Max lights supported by shader
#define LIGHT_DISTANCE 3.5! '' Light distance from world center
#define LIGHT_HEIGHT 1.0! '' Light height position
/'
Types and Structures Definition
'/
enum _
LightType
LIGHT_DIRECTIONAL
LIGHT_POINT
end enum
type _
Light
as boolean _
enabled
as LightType _
type
as Vector3 _
position, _
target
as Color _
color
as long _
enabledLoc, _
typeLoc, _
posLoc, _
targetLoc, _
colorLoc
end type
extern "C" '' Prevents name mangling of functions
/'
Module Functions Declaration
'/
'' Defines a light and get locations from PBR shader
declare sub _
CreateLight( _
byval _type as long, byref _pos as Vector3, byref targ as Vector3, byref _color as Color, byref _shader as Shader )
'' Send to PBR shader light values
declare sub _
UpdateLightValues( byref _shader as Shader, byref _light as Light )
end extern
#endif '' RLIGHTS_H
/'
************************************************************************************
*
* RLIGHTS IMPLEMENTATION
*
************************************************************************************/
'/
#if defined( RLIGHTS_IMPLEMENTATION )
#include once "raylib.bi"
dim shared as Light _
lights( MAX_LIGHTS )
'' Current amount of created lights
dim shared as long _
lightsCount => 0
extern "C"
'' Defines a light and get locations from PBR shader
sub _
CreateLight( _
byval _type as long, _
byref _pos as Vector3, _
byref targ as Vector3, _
byref _color as Color, _
byref _shader as Shader )
dim as Light _
_light
if( lightsCount < MAX_LIGHTS ) then
with _light
.enabled => true
.type => _type
.position => _pos
.target => targ
.color => _color
end with
dim as string _
enabledName => "lights[" & lightsCount & "].enabled", _
typeName => "lights[" & lightsCount & "].type", _
posName => "lights[" & lightsCount & "].position", _
targetName => "lights[" & lightsCount & "].target", _
colorName => "lights[" & lightsCount & "].color"
with _light
.enabledLoc => GetShaderLocation( _shader, strPtr( enabledName ) )
.typeLoc => GetShaderLocation( _shader, strPtr( typeName ) )
.posLoc => GetShaderLocation( _shader, strPtr( posName ) )
.targetLoc => GetShaderLocation( _shader, strPtr( targetName ) )
.colorLoc => GetShaderLocation( _shader, strPtr( colorName ) )
end with
UpdateLightValues( _shader, _light )
lights( lightsCount ) => _light
lightsCount +=> 1
end if
end sub
'' Send to PBR shader light values
sub _
UpdateLightValues( _
byref _shader as Shader, _
byref _light as Light )
'' Send to shader light enabled state and type
SetShaderValue( _shader, _light.enabledLoc, @_light.enabled, UNIFORM_INT )
SetShaderValue( _shader, _light.typeLoc, @_light.type, UNIFORM_INT )
'' Send to shader light position values
dim as single _
position( 0 to 2 ) => { _
_light.position.x, _
_light.position.y, _
_light.position.z }
SetShaderValue( _shader, _light.posLoc, @position( 0 ), UNIFORM_VEC3 )
'' Send to shader light target position values
dim as single _
target( 0 to 2 ) => { _
_light.target.x, _
_light.target.y, _
_light.target.z }
SetShaderValue( _shader, _light.targetLoc, @target( 0 ), UNIFORM_VEC3 )
'' Send to shader light color values
dim as single _
diff( 0 to 3 ) => { _
_light.color.r / 255, _
_light.color.g / 255, _
_light.color.b / 255, _
_light.color.a / 255 }
SetShaderValue( _shader, _light.colorLoc, @diff( 0 ), UNIFORM_VEC4 )
end sub
end extern
#endif '' RLIGHTS_IMPLEMENTATION
-
- Posts: 8586
- Joined: May 28, 2005 3:28
- Contact:
Re: raylib headers
On windows the *.dll's wasn't linked with the "-static-libgcc" linker flag so the mingw gcc runtime library are needed also.
How ever I made this changes with cmake compiled raylib V3.0 (static and dynamic 32/64-bit) and created fbraylib.bi and fbraylbimath.bi (improved of course)
But looks like all changes of V2.5 to V3.0 are internal only, no new stuff for the user of the library :-(
(I can't find a kind of changelog of raylib V3.0)
I wonder me that all structs like music, camera, vector, color ... are all pushed BYVAL on the stack (a slow copy) why not BYREF !
(on more mystery thing of this cute lib)
Joshy
How ever I made this changes with cmake compiled raylib V3.0 (static and dynamic 32/64-bit) and created fbraylib.bi and fbraylbimath.bi (improved of course)
But looks like all changes of V2.5 to V3.0 are internal only, no new stuff for the user of the library :-(
(I can't find a kind of changelog of raylib V3.0)
I wonder me that all structs like music, camera, vector, color ... are all pushed BYVAL on the stack (a slow copy) why not BYREF !
(on more mystery thing of this cute lib)
Joshy
Re: raylib headers
impressive library. it would be cool to divert it from its use and use it to create a graphical interface to programs generated by freebasic. the programs compiled with the static library are around 630 kb in size. it's perfect. I tried to test it with codeblocks but it is parameter for windows. if i have time i will fix this problem. I now only use linux.
Re: raylib headers
Seems not to be the case with the binary I have (both FreeBasic and C are linking against the same lib in the above examples). Will have a closer look, thanks.D.J.Peters wrote:On windows the *.dll's wasn't linked with the "-static-libgcc" linker flag so the mingw gcc runtime library are needed also.
...
Yeah, was looking into raymath.bi and it could use some improvements. Where did you found the raylib 3.0 sources? I can't seem to find them (not that I looked much, anyway). The latest release in the official repo seems to be 2.6.D.J.Peters wrote:...
How ever I made this changes with cmake compiled raylib V3.0 (static and dynamic 32/64-bit) and created fbraylib.bi and fbraylbimath.bi (improved of course)
But looks like all changes of V2.5 to V3.0 are internal only, no new stuff for the user of the library :-(
(I can't find a kind of changelog of raylib V3.0)
...
Indeed, this also struck me as strange. On the other hand, none of the structures are too large so...D.J.Peters wrote:...
I wonder me that all structs like music, camera, vector, color ... are all pushed BYVAL on the stack (a slow copy) why not BYREF !
(on more mystery thing of this cute lib)
Joshy
Users of the lib already did, it's called 'raygui'. Naturally, this is also one of the uses I indend for it (but quality rendering of primitives is probably best left to ie Cairo), and the lib also implements some convenience features for in-engine tooling (drag and drop support and clipboard routines, for example).Coolman wrote:impressive library. it would be cool to divert it from its use and use it to create a graphical interface to programs generated by freebasic. the programs compiled with the static library are around 630 kb in size. it's perfect. I tried to test it with codeblocks but it is parameter for windows. if i have time i will fix this problem. I now only use linux.
Linking statically against it would solve most of the functionality issues of the dated FBGFX2. One thing I did notice is that the library lacks a way of exposing the OpenGL context so you can bind extensions against it (for DIY OpenGL rendering). You can of course use the FreeBasic builtins, but this isn't recommended by the Kronos Group and may have undefined results.
Modifying the lib to allow this shouldn't pose too much trouble, though, but I'll have to dig deeper into the sources and work alonside the devels (or simply ask them to include it XD)
Can somebody please confirm that both the above examples are running as expected, so I can discard my gfx card (which is notoriously sh*tty) before embarking on a fruitless bug hunt?
-
- Posts: 8586
- Joined: May 28, 2005 3:28
- Contact:
Re: raylib headers
The latest version V3.0 is the current github branche last changes 2 and 3 days ago.
https://github.com/raysan5/raylib
V2.6 32-bit lib has the dependencies 64-bit are ok.
Joshy
https://github.com/raysan5/raylib
V2.6 32-bit lib has the dependencies 64-bit are ok.
Joshy
-
- Posts: 52
- Joined: Jan 13, 2018 8:47
- Location: Germany
- Contact:
Re: raylib headers
models_material_pbc.c does work for me as expected. What OpenGL version is in use for you? It should tell in the console output when starting the example.paul doe wrote:Ported the rlights.h header, to port some examples that need it (namely, models_material_pbr.c). However, all I've got was a white screen. So, I tested the C example and alas, same thing.
I can confirm that the skybox is flipped in both, the C and the ported FB example. I will take a look at the shader when I have more time.paul doe wrote:FreeBasic port above, original C code below (models_skybox.c). I wonder if the author changed something, and/or the repo I downloaded (2.6) is broken somehow? Mmmm...
Ported also some other 3D examples and they're fine, so I think that the shaders are giving me these results. Can you confirm, please?
I have seen that aswell and changed it in raymath.bi (The file was auto-generated by fbfrog). I am not touching the byvals in raylib.bi for now, since I don't know where it is actually needed.D.J.Peters wrote:I wonder me that all structs like music, camera, vector, color ... are all pushed BYVAL on the stack (a slow copy) why not BYREF !
Well, take a look at the struct Mesh, which is 102 bytes in size.paul doe wrote:Indeed, this also struck me as strange. On the other hand, none of the structures are too large so...
Re: raylib headers
excellent lib but the compilation instructions are for windows. i had to make some adaptations to compile under linux with codeblocks. that said, to speed up the compilation, i made the following bash script :
use : position yourself in the examples directory which contains the *.c files and run the script.
note : this will work if you have compiled and installed raylib and a few other necessary libraries under linux...
note : i have corrected the script in case the files to be processed have several points. it's rare but it can happen...
Code: Select all
#!/bin/bash
shopt -s nullglob
for f in *.c
do
echo Compiling : "$f"
gcc -O2 -Wall -m64 -O2 -c "$f" -o "${f%.*}".obj
g++ -o "${f%.*}" "${f%.*}".obj -m64 -lraylib -lGL -lm -lpthread -ldl -lrt -lX11 -s
done
note : this will work if you have compiled and installed raylib and a few other necessary libraries under linux...
note : i have corrected the script in case the files to be processed have several points. it's rare but it can happen...
Last edited by Coolman on Mar 14, 2020 16:21, edited 2 times in total.
Re: raylib headers
@Joshy: I see. Thanks for confirming this.
@Coolman: very useful, thanks!
It uses the 3.30 version of the shaders. 1.1 also gives me the same results, so it is indeed my card, then.IchMagBier wrote:...
models_material_pbc.c does work for me as expected. What OpenGL version is in use for you? It should tell in the console output when starting the example.
Then it is the shader alright. Thanks for checking this.IchMagBier wrote:...
I can confirm that the skybox is flipped in both, the C and the ported FB example. I will take a look at the shader when I have more time.
...
Perhaps, but is still fits into a single cache line (usually 128 bytes). To address a single member of the struct, the prefetcher still has to load the entire struct into the cache anyway, so perhaps it was designed to take this into account?IchMagBier wrote:...
Well, take a look at the struct Mesh, which is 102 bytes in size.
@Coolman: very useful, thanks!
Re: raylib headers
note : i have corrected the script in case the files to be processed have several points. it's rare but it can happen...
-
- Posts: 3906
- Joined: Jan 01, 2009 7:03
- Location: Australia
Re: raylib headers
When I tried to run an example:
Command executed:
"C:\FreeBasic\fbc.exe" "C:\FreeBasic\raylib-fb-master\examples\2d.bas"
Compiler output:
C:\FreeBasic\bin\win32\ld.exe: cannot find -lraylib
Results:
Compilation failed
System:
FBIde: 0.4.6
fbc: FreeBASIC Compiler - Version 1.07.1 (2019-09-27), built for win32 (32bit)
OS: Windows NT 6.2 (build 9200)
Command executed:
"C:\FreeBasic\fbc.exe" "C:\FreeBasic\raylib-fb-master\examples\2d.bas"
Compiler output:
C:\FreeBasic\bin\win32\ld.exe: cannot find -lraylib
Results:
Compilation failed
System:
FBIde: 0.4.6
fbc: FreeBASIC Compiler - Version 1.07.1 (2019-09-27), built for win32 (32bit)
OS: Windows NT 6.2 (build 9200)
Re: raylib headers
I had the same problem. You need Raylib from here: https://github.com/raysan5/raylib/releases.BasicCoder2 wrote:When I tried to run an example:
Command executed:
"C:\FreeBasic\fbc.exe" "C:\FreeBasic\raylib-fb-master\examples\2d.bas"
Compiler output:
C:\FreeBasic\bin\win32\ld.exe: cannot find -lraylib
Results:
Compilation failed
System:
FBIde: 0.4.6
fbc: FreeBASIC Compiler - Version 1.07.1 (2019-09-27), built for win32 (32bit)
OS: Windows NT 6.2 (build 9200)
-
- Posts: 3906
- Joined: Jan 01, 2009 7:03
- Location: Australia
Re: raylib headers
Ok thanks, although I am not sure which one of the 9 "assets" to download.UEZ wrote:I had the same problem. You need Raylib from here: https://github.com/raysan5/raylib/releases.
Re: raylib headers
I used the minigw versions for Windows only. I don't know if msvc version is better (faster).BasicCoder2 wrote:Ok thanks, although I am not sure which one of the 9 "assets" to download.UEZ wrote:I had the same problem. You need Raylib from here: https://github.com/raysan5/raylib/releases.
I'm not using Linux or any other OS.