Giter Club home page Giter Club logo

corange's People

Contributors

antoniocs avatar benwaffle avatar blogdron avatar d4v3y5c0n3s avatar eagleivg avatar jdek avatar mulle-nat avatar orangeduck avatar ricop avatar timgates42 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

corange's Issues

OpenGL Error: Invalid Enum

Hi !
I've got this error when compiling almost all demos :
[DEBUG] (src/casset.c:folder_load:308) Loading Folder: '/home/oki28z/git/Corange/demos/rendering/assets/podium'
[DEBUG] (src/casset.c:file_load:282) Loading: '/home/oki28z/git/Corange/demos/rendering/assets/podium/podium.mat'
[DEBUG] (src/casset.c:file_load:282) Loading: '/home/oki28z/git/Corange/demos/rendering/assets/podium/podium.dds'
[ERROR] (src/assets/texture.c:dds_load_file:572) OpenGL Error: Invalid Enum

How can I fix it ?
Thanks for your help :-)

MAX_PATH undeclared in cengine.h

I've just made a clone, the HEAD is at 841fcf6 and when running make I get the following error:

[karol@localhost 13-01-10 21:26 Code/Corange]> make
gcc src/cengine.c -c -I ./include -std=gnu99 -Wall -Werror -Wno-unused -O3 -g -fPIC -o obj/cengine.o
In file included from src/cengine.c:1:0:
./include/cengine.h:39:12: error: ‘MAX_PATH’ undeclared here (not in a function)
make: *** [obj/cengine.o] Błąd 1

SDL_GL_GetProcAddress incorrectly used in SDL_local.c macro.

The SDL_GL_LoadExtension macro is looking for NULL return to determine extension availability, that could have undefined behavior.

From the SDL2 reference manual
"if you look up a function that doesn't exist, you'll get a non-NULL result that is NOT safe to call", for Linux at least.

A more correct form would be something like:
#define SDL_GL_LoadExtension(type, name)
if (SDL_GL_ExtensionSupported(#name))
name = (type)SDL_GL_GetProcAddress(#name);
else if (SDL_GL_ExtensionSupported(#name"EXT"))
name = (type)SDL_GL_GetProcAddress(#name"EXT");
else if (SDL_GL_ExtensionSupported(#name"ARB"))
name = (type)SDL_GL_GetProcAddress(#name"ARB");
else
fprintf(stderr, "Failed to load any of function '%s*')\n", #name);

In any case, I found this problem because when trying Corange I can't load any of the extensions. For instance, glCreateProgram* does not exist in the extension list of glGetString(GL_EXTENSIONS) and SDL_GL_ExtensionSupported() returns false for it as well.

The context is a 4.5.0, im on nvidias latest propietary drivers (gtx880). Any idea why?

Is the "quadratic()" function being properly calculated?

I recently asked another question about the "quadratic()" function, but I have another one about the implementation. This function obviously lets one use the quadratic formula, which is x = (-b +- sqrt(b^2 - 4 * a * c))/2a. Please see this Khan Academy if my quadratic formula is unclear. This is almost reflected in the code, but instead of "2a," it appears to divide the discriminant by just "2." Why is this? I'm fairly new to computer graphics math, so I am unsure if this is intentional or not.

Here is the code from Corange that I'm asking about, with the parts I'm curious about followed by a comment.
`bool quadratic(float a, float b, float c, float* t0, float* t1) {

float descrim = bb - 4a*c;

if (descrim < 0) {

return false;

} else {

float d = sqrtf(descrim);
float q = (b < 0) ? (-b - d) / 2.0 : (-b + d) / 2.0;//  Should "2.0" be changed to "2.0*a"?

*t0 = q / a;
*t1 = c / q;

return true;

}

}`

MinGW Compilation: "redeclared as different kind of symbol" errors

I'm not experienced at C command line compilation; compiling for Windows, attempted from both Windows MSys2 and Linux platforms with same error. Only change to code was the CC and AR variables in Makefile. I'm not sure if the problem is me, or that I'm the only one compiling this way:

CC=x86_64-w64-mingw32-gcc-8.3-posix
AR=x86_64-w64-mingw32-gcc-ar-posix

I downloaded the mingw SDL, SDL_mixer, SDL_net libraries and just copied the headers into the .include/SDL2 folder manually
This is the "make" result:

make
x86_64-w64-mingw32-gcc-8.3-posix src/cengine.c -c -I ./include -std=gnu99 -Wall -Werror -Wno-unused -O3 -g -fPIC -o obj/cengine.o
In file included from ./include/cengine.h:34,
                 from src/cengine.c:1:
./include/SDL2/SDL_local.h:116:28: error: ‘glActiveTexture’ redeclared as different kind of symbol
   extern GLACTIVETEXTUREFN glActiveTexture;
                            ^~~~~~~~~~~~~~~
In file included from ./include/cengine.h:30,
                 from src/cengine.c:1:
./include/SDL2/SDL_opengl.h:1878:23: note: previous declaration of ‘glActiveTexture’ was here
 GLAPI void GLAPIENTRY glActiveTexture( GLenum texture );
                       ^~~~~~~~~~~~~~~
In file included from ./include/cengine.h:34,
                 from src/cengine.c:1:
./include/SDL2/SDL_local.h:117:35: error: ‘glCompressedTexImage2D’ redeclared as different kind of symbol
   extern GLCOMPRESSEDTEXIMAGE2DFN glCompressedTexImage2D;
                                   ^~~~~~~~~~~~~~~~~~~~~~
In file included from ./include/cengine.h:30,
                 from src/cengine.c:1:
./include/SDL2/SDL_opengl.h:1884:23: note: previous declaration of ‘glCompressedTexImage2D’ was here
 GLAPI void GLAPIENTRY glCompressedTexImage2D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data );
                       ^~~~~~~~~~~~~~~~~~~~~~
In file included from ./include/cengine.h:34,
                 from src/cengine.c:1:
./include/SDL2/SDL_local.h:118:25: error: ‘glTexImage3D’ redeclared as different kind of symbol
   extern GLTEXIMAGE3DFN glTexImage3D;
                         ^~~~~~~~~~~~
In file included from ./include/cengine.h:30,
                 from src/cengine.c:1:
./include/SDL2/SDL_opengl.h:1551:23: note: previous declaration of ‘glTexImage3D’ was here
 GLAPI void GLAPIENTRY glTexImage3D( GLenum target, GLint level,
                       ^~~~~~~~~~~~
make: *** [Makefile:43: obj/cengine.o] Error 1

Doesn't build on linux

You get a lot of linker errors like

/usr/bin/ld: obj/cengine.o:/home/src/src/unix/Corange/./include/cengine.h:80: multiple definition of `debug_str'; obj/casset.o:/home/src/src/unix/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/cengine.o:/home/src/src/unix/Corange/./include/cengine.h:79: multiple definition of `debug_buf'; obj/casset.o:/home/src/src/unix/Corange/./include/cengine.h:79: first defined here

The problem is that the cengine.h header defines global buffer variables, that are compiled into each file:

#define ERROR_BUFFER_SIZE   2048*4
#define DEBUG_BUFFER_SIZE   2048*4
#define WARNING_BUFFER_SIZE 2048*4

...

char error_buf[ERROR_BUFFER_SIZE];
char error_str[ERROR_BUFFER_SIZE];

char warning_buf[WARNING_BUFFER_SIZE];
char warning_str[WARNING_BUFFER_SIZE];

char debug_buf[DEBUG_BUFFER_SIZE];
char debug_str[DEBUG_BUFFER_SIZE];

There are two quick solutions

  • turn them into declarations with extern in cengine.h and define them in cengine.c once
  • make these buffers local variables to the block, like so:
#define error(MSG, ...) { \  
  char error_buf[ERROR_BUFFER_SIZE]; \
  char error_str[ERROR_BUFFER_SIZE]; \
  snprintf(error_str,(ERROR_BUFFER_SIZE-1), "[ERROR] (%s:%s:%i) ", __FILE__, __func__, __LINE__); \
  snprintf(error_buf,(ERROR_BUFFER_SIZE-1), MSG, ##__VA_ARGS__); strcat(error_str, error_buf);    \
  error_(error_str); }

This is thread-safer as a bonus, but putting 16K on the stack seems somewhat excessive.

How does the interpolation work on the animation?

Here:

time = fmod(time, a->frame_time * (a->frame_count-1));
frame* frame0 = animation_frame(a, (time / a->frame_time) + 0);
frame* frame1 = animation_frame(a, (time / a->frame_time) + 1);
float amount = fmod(time / a->frame_time, 1.0);
frame_interpolate_to(frame0, frame1, amount, out);
}

I don't understand why you do time = fmod(time, a->frame_time * (a->frame_count-1)); and then (time / a->frame_time) + 0 for the first frame.

macOS Big Sur, $(make) fails

$ pwd
/Users/XXX/tools/corange

$ ls
LICENCE.md  README.md   corange.ico demos       obj
Makefile    assets_core corange.rc  include     src

$ sudo make
Password:
gcc src/cengine.c -c -I ./include -std=gnu99 -Wall -Werror -Wno-unused -O3 -g -fPIC -o obj/cengine.o
src/cengine.c:6:7: error: variable 'p' is used uninitialized whenever 'if' condition is true [-Werror,-Wsometimes-uninitialized]
  if (unlikely(strlen(path) >= PATH_MAX)) {
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./include/cengine.h:115:21: note: expanded from macro 'unlikely'
#define unlikely(x) __builtin_expect((x),0)
                    ^~~~~~~~~~~~~~~~~~~~~~~
src/cengine.c:12:10: note: uninitialized use occurs here
  return p;
         ^
src/cengine.c:6:3: note: remove the 'if' if its condition is always false
  if (unlikely(strlen(path) >= PATH_MAX)) {
  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/cengine.c:4:3: note: variable 'p' is declared here
  fpath p;
  ^
1 error generated.
make: *** [obj/cengine.o] Error 1

Tried on Linux Mint last time, worked fine.
Switched to Big Sur last month.
Most important thing, I'm a noob.

$ uname -a
Darwin XXXMacBook-Air.local 20.4.0 Darwin Kernel Version 20.4.0: Thu Apr 22 21:46:47 PDT 2021; root:xnu-7195.101.2~1/RELEASE_X86_64 x86_64

Could not compile

$ pwd
/Users/XXX/tools/corange/demos/sea

$ ls
Makefile assets   sea.c

$ make
gcc sea.c -I../../include -std=gnu99 -Wall -Werror -Wno-unused -O3 -g -lcorange -framework OpenGL -lSDL2main -lSDL2 -lSDL2_net -lSDL2_mixer -o sea
sea.c:123:79: error: function definition is not allowed here
  collision collision_test_ellipsoid(void* x, vec3* position, vec3* velocity) {
                                                                              ^
sea.c:130:74: error: use of undeclared identifier 'collision_test_ellipsoid'
  collision_response_slide(g_dr, &test_ellipsoid.center, &test_velocity, collision_test_ellipsoid);
                                                                         ^
sea.c:185:71: error: function definition is not allowed here
  collision collision_camera(void* x, vec3* position, vec3* velocity) {
                                                                      ^
sea.c:189:59: error: use of undeclared identifier 'collision_camera'; did you mean 'collision_merge'?
  collision_response_slide(g_dr, &c->position, &velocity, collision_camera);
                                                          ^~~~~~~~~~~~~~~~
                                                          collision_merge
../../include/cphysics.h:21:11: note: 'collision_merge' declared here
collision collision_merge(collision c0, collision c1);
          ^
4 errors generated.
make: *** [sea] Error 1

And I have SDL2 installed:

$ brew list | grep sdl
sdl2
sdl2_gfx
sdl2_image
sdl2_mixer
sdl2_net
sdl2_ttf

$ clang --version
Apple clang version 12.0.5 (clang-1205.0.22.9)
Target: x86_64-apple-darwin20.4.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

send help uwu

compilation failure

gcc src/SDL2/SDL_local.c -c -I ./include -std=gnu99 -Wall -Werror -Wno-unused -O3 -g -fPIC -o obj/SDL_local.o
src/SDL2/SDL_local.c:16:0: error: "MAX_PATH" redefined [-Werror]
 #define MAX_PATH 512
 ^
In file included from src/SDL2/SDL_local.c:1:0:
./include/SDL2/SDL_local.h:14:0: note: this is the location of the previous definition
   #define MAX_PATH PATH_MAX
 ^
cc1: all warnings being treated as errors
Makefile:46: recipe for target 'obj/SDL_local.o' failed
make: *** [obj/SDL_local.o] Error 1

Materials

The current setup for materials sucks. The syntax is bad and having two different asset types for materials and multi-materials is a hack.

Ultimately I don't want to bring in an external library for parsing so the syntax needs to be as simple as possible but I'd also like it to be uniform and relatively C-like.

Some other issues:

  • Material Entry duplication - There is lots of replication in material files, in particular for shader listings.
  • Shader Program duplication - Because there are no longer program assets each material uses a new program even if not unique. This wastes GPU memory.
  • Internal access - Dealing with materials in the C code also is horrible.
  • Blurry Concept - Because they are used by deferred and forward renders, materials are a horrible blurred concept. Should deferred using a different asset type? One that isn't so catch-all?

Stuff to add to the wiki

I've been adding explanations, mostly for file handling to the wiki. What other stuff would be missing?

Parallax mapping problem (maybe offtop)

Hi Daniel, can you help me?
I do not understand if the problem is related to the engine or the fact that I am an idiot)) I try to make a parallax map, but I have a lot of distortions, if I do the calculations in the vertex shader, and if I do them in fragmentary shaders, then everything is correct only displayed on two sides of the cube. I added a video where everything is visible and the shader code

I have been suffering for a week, I do not understand how to fix it Maybe this is a feature of the data in the engine and I just do not notice?

Click in image to video
video parallax broken

I create repo https://github.com/fedor-elizarov/parallax_data there is a collected work program (linux only)

vertex shader in assets_core/shaders/deffered/static.vs

#version 120

attribute vec3 vPosition;
attribute vec2 vTexcoord;
attribute vec3 vNormal;
attribute vec3 vTangent;
attribute vec3 vBinormal;

uniform vec3 camera_position;
uniform mat4 world;
uniform mat4 view;
uniform mat4 proj;

varying vec2 fTexcoord;
varying vec3 fColor;
varying vec3 fPosition;
varying mat4 fTBN;

varying vec3 fTanViewPos;
varying vec3 fTanFragPos;



void main( void ) {
  
  vec3 w_tangent  = mat3(world) * vTangent;
  vec3 w_binormal = mat3(world) * vBinormal;
  vec3 w_normal   = mat3(world) * vNormal;
  
  fTBN = mat4(
    w_tangent.x, w_binormal.x, w_normal.x, 0.0,
    w_tangent.y, w_binormal.y, w_normal.y, 0.0,
    w_tangent.z, w_binormal.z, w_normal.z, 0.0,
    0.0, 0.0, 0.0, 1.0 );

  vec4 world_position = world * vec4(vPosition, 1);
  
  fColor = vec3(1.0, 1.0, 1.0);

  fTexcoord = vTexcoord;
  fPosition = world_position.xyz / world_position.w;

  mat3 TBN= transpose(mat3(normalize (w_tangent),
                           normalize (w_binormal),
                           normalize (w_normal)));
  fTanFragPos = TBN * fPosition;
  fTanViewPos = TBN * camera_position;
  fTanViewPos = normalize(fTanViewPos - fTanFragPos);
  fTanViewPos.y = -fTanViewPos.y;

   gl_Position = proj * view * world_position;
  
} 

fragment shader in assets_core/shaders/deffered/static.fs

#version 120

uniform sampler2D diffuse_map;
uniform sampler2D normal_map;
uniform sampler2D specular_map;
uniform sampler2D parallax_map;

uniform vec3  camera_position;
uniform float glossiness_level;
uniform float bumpiness_level;
uniform float specular_level;
uniform float parallax_level;
uniform float alpha_test;
uniform int   material;

uniform float clip_near;
uniform float clip_far;

varying vec2 fTexcoord;
varying vec3 fColor;
varying vec3 fPosition;
varying mat4 fTBN;

varying vec3 fTanViewPos;
varying vec3 fTanFragPos;


vec3 to_gamma(vec3 color) {
  vec3 ret;
  ret.r = pow(color.r, 2.2);
  ret.g = pow(color.g, 2.2);
  ret.b = pow(color.b, 2.2);
	return ret;
}

vec3 from_gamma(vec3 color) {
  vec3 ret;
  ret.r = pow(color.r, 1.0/2.2);
  ret.g = pow(color.g, 1.0/2.2);
  ret.b = pow(color.b, 1.0/2.2);
	return ret;
}

vec3 swap_red_green_inv(vec3 color) {
  float temp = 1.0-color.r;
  color.r = 1.0-color.g;
  color.g = temp;
  return color;
}


float linear_depth(float depth, float near, float far){
  return (2.0 * near) / (far + near - depth * (far - near));
}


vec2 parallax_uv(vec2 uv, vec3 view_dir)
{

  float num_layers = 22;
  float layer_depth = 1.0 / num_layers;
  float cur_layer_depth = 0.0;
  vec2 delta_uv = view_dir.xy  * parallax_level / num_layers;
  vec2 cur_uv = uv;
  float depth_from_tex = texture2D(parallax_map, cur_uv).r;
  for (int i = 0; i < num_layers; i++) {
      cur_layer_depth += layer_depth;
      cur_uv -= delta_uv;
      depth_from_tex = texture2D(parallax_map, cur_uv).r;
      if (depth_from_tex < cur_layer_depth){
          break;
      }
  }
  /*
   //Step Parallax mapping
  return cur_uv;
  */

  // Parallax occlusion mapping
  vec2 prev_uv = cur_uv + delta_uv;
  float next = depth_from_tex - cur_layer_depth;
  float prev = texture2D(parallax_map, prev_uv).r - cur_layer_depth
               + layer_depth;
  float weight = next / (next - prev);
  return mix(cur_uv, prev_uv, weight);

  /*
  //Simple Parallax mapping
  float dep = texture2D(parallax_map,uv).z;
  vec2  uvn = view_dir.xy * (dep * parallax_level);
  return uv - uvn ;
  */
}

   void main( void ) {

    vec2 uvs = vec2(fTexcoord.x, -fTexcoord.y);
    if(parallax_level != 0.0)
    {
          mat3 TBN=transpose(mat3(normalize(fTBN[0]),
                                  normalize(fTBN[1]),
                                  normalize(fTBN[2])));
          vec3 position  = normalize(camera_position - fPosition);
          vec3 ViewPos   = TBN * position;
               ViewPos.y = -ViewPos.y;

          /*calculate from fragment shader*/
           //Variant 1 
            uvs=parallax_uv(uvs, ViewPos);         // correct 2 plane in box
          
          /*calculate from vertex shader*/
          //Variant 2 
          // uvs = parallax_uv(uvs,fTanViewPos); // all planes in box is broken


        if(uvs.x > 1.0 || uvs.y > 1.0 || uvs.x < 0.0 || uvs.y < 0.0)
        {
            // discard;
        };
    };
    vec4 diffuse = texture2D(diffuse_map, uvs);
	float spec = texture2D(specular_map, uvs).r * specular_level;
	vec4 normal = texture2D(normal_map, uvs);


    if (diffuse.a < alpha_test) { discard; }

	normal.rgb = swap_red_green_inv(normal.rgb);
    normal = mix(normal, vec4( 0.5, 0.5, 1.0, 1.0 ), bumpiness_level);
	normal = (normal * 2.0 - vec4(1.0,1.0,1.0,0.0)) * fTBN;
  
	gl_FragData[0].rgb = from_gamma(diffuse.rgb) * fColor;
	gl_FragData[0].a = spec;
	
	gl_FragData[1].rgb = normal.rgb;
    gl_FragData[1].a = float(material) + glossiness_level / 1000;

    gl_FragDepth = linear_depth(gl_FragCoord.z, clip_near, clip_far);
 
}

diff input data in shader in render.c (render_static())

+ shader_program_set_vec3(shader,  "camera_position",dr->camera->position);
+ shader_program_set_float(shader,   "parallax_level", material_entry_item(me, "parallax_level").as_float);
+ shader_program_set_texture(shader, "parallax_map", 3, material_entry_item(me, "parallax_map").as_asset);

Unable to compile in MSYS2 MINGW64

I have installed SDL2 in latest version of MSYS2

pacman -S mingw-w64-x86_64-SDL2 mingw-w64-x86_64-SDL2_net

And I have issue the make command

I am getting the below error

$ make
gcc src/casset.c -c -I ./include -std=gnu99 -Wall -Werror -Wno-unused -O3 -g -o obj/casset.o
In file included from ./include/cengine.h:34,
                 from ./include/casset.h:24,
                 from src/casset.c:1:
./include/SDL2/SDL_local.h:116:28: error: 'glActiveTexture' redeclared as different kind of symbol
  116 |   extern GLACTIVETEXTUREFN glActiveTexture;
      |                            ^~~~~~~~~~~~~~~
In file included from ./include/cengine.h:30,
                 from ./include/casset.h:24,
                 from src/casset.c:1:
C:/msys64/mingw64/include/SDL2/SDL_opengl.h:1878:23: note: previous declaration of 'glActiveTexture' was here
 1878 | GLAPI void GLAPIENTRY glActiveTexture( GLenum texture );
      |                       ^~~~~~~~~~~~~~~
In file included from ./include/cengine.h:34,
                 from ./include/casset.h:24,
                 from src/casset.c:1:
./include/SDL2/SDL_local.h:117:35: error: 'glCompressedTexImage2D' redeclared as different kind of symbol
  117 |   extern GLCOMPRESSEDTEXIMAGE2DFN glCompressedTexImage2D;
      |                                   ^~~~~~~~~~~~~~~~~~~~~~
In file included from ./include/cengine.h:30,
                 from ./include/casset.h:24,
                 from src/casset.c:1:
C:/msys64/mingw64/include/SDL2/SDL_opengl.h:1884:23: note: previous declaration of 'glCompressedTexImage2D' was here
 1884 | GLAPI void GLAPIENTRY glCompressedTexImage2D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data );
      |                       ^~~~~~~~~~~~~~~~~~~~~~
In file included from ./include/cengine.h:34,
                 from ./include/casset.h:24,
                 from src/casset.c:1:
./include/SDL2/SDL_local.h:118:25: error: 'glTexImage3D' redeclared as different kind of symbol
  118 |   extern GLTEXIMAGE3DFN glTexImage3D;
      |                         ^~~~~~~~~~~~
In file included from ./include/cengine.h:30,
                 from ./include/casset.h:24,
                 from src/casset.c:1:
C:/msys64/mingw64/include/SDL2/SDL_opengl.h:1551:23: note: previous declaration of 'glTexImage3D' was here
 1551 | GLAPI void GLAPIENTRY glTexImage3D( GLenum target, GLint level,
      |                       ^~~~~~~~~~~~
make: *** [Makefile:43: obj/casset.o] Error 1

What could be the issue

Dist

Take the build files such as the executables and libraries out of the repo and set up makefile system for building proper distributions.

Platformer has issues with velocity

The bird in the platformer has weird movement, it doesn't seem intuitive, it seems to accelerate either too little or too much.

It would be a good idea to make the buttons add acceleration to the velocity, and not edit the velocity 'directly'.

Screen Space Local Reflections (SSLR) (Just It may be useful to someone)

image-sslr
And test video https://www.youtube.com/watch?v=_kgjMhhp3Rs

Hi, I was playing with the implementation of local reflections in the screen space. I did it, not quite a good but minimal implementation. At first I wanted to make a demo or embed this in the render, but since not everything works perfectly, I just leave the construction processing and shader functions here, if anyone is interested, they can just replace the shader and the engine function and it will work. It just might be useful to someone. In my fork for experimenters, I will continue to try to make a good implementation which can then be offered as a demo or as full support for rendering.

In its current form, any object can become mirrored if glossiness = 1 is specified in its 3Dobject.mat material

src/rendering/renderer.c render_post0

static void render_post0(renderer* dr) {


  glBindFramebuffer(GL_FRAMEBUFFER, dr->ldr_front_fbo);

  glViewport(0, 0, dr->viewport_size_x, dr->viewport_size_y);
  glLoadIdentity();
  glClearColor(1.0, 0.0, 0.0, 1.0);
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

  shader_program* shader = material_first_program(asset_hndl_ptr(&dr->mat_post0));
  shader_program_enable(shader);
  shader_program_set_mat4(shader, "world", mat4_id());
  shader_program_set_mat4(shader, "view", mat4_id());
  shader_program_set_mat4(shader, "proj", mat4_orthographic(-1, 1, -1, 1, -1, 1));

  shader_program_set_texture_id(shader, "ldr_texture",    0, dr->ldr_back_texture);
  
  shader_program_set_texture_id(shader, "depth_texture",  1, dr->gdepth_texture);
  shader_program_set_texture_id(shader, "normal_texture", 2, dr->gnormals_texture);

  shader_program_set_mat4(shader, "cam_view",     dr->camera_view);
  shader_program_set_mat4(shader, "cam_proj",     dr->camera_proj);
  shader_program_set_mat4(shader, "cam_inv_proj", dr->camera_inv_proj);
  shader_program_set_mat4(shader, "cam_inv_view", dr->camera_inv_view);
  shader_program_set_float(shader,"cam_near",     dr->camera_near);
  shader_program_set_float(shader,"cam_far",      dr->camera_far);
  shader_program_set_vec3(shader, "cam_pose",     dr->camera->position);

  shader_program_enable_attribute(shader, "vPosition",  3, 3, quad_position);
  shader_program_enable_attribute(shader, "vTexcoord",  2, 2, quad_texcoord);

    glDrawArrays(GL_TRIANGLES, 0, 6);

  shader_program_disable_attribute(shader, "vPosition");
  shader_program_disable_attribute(shader, "vTexcoord");

  shader_program_disable(shader);
  glBindFramebuffer(GL_FRAMEBUFFER, 0);
  SDL_GL_CheckError();
  SDL_GL_CheckFrameBuffer();

}

assets_core/shaders/deferred/post0.fs

#version 120

uniform sampler2D ldr_texture;
uniform sampler2D depth_texture;
uniform sampler2D normal_texture;

uniform vec3  cam_pose;
uniform mat4  cam_view;
uniform mat4  cam_proj;
uniform mat4  cam_inv_proj;
uniform mat4  cam_inv_view;
uniform float cam_near;
uniform float cam_far;

varying vec2 fTexcoord;
//-------------------------------------------------
float linear_depth(float depth, float near, float far){
  return (2.0 * near) / (far + near - depth * (far - near));
}

float perspective_depth(float depth, float near, float far) {
  return (((2.0 * near) / depth) - far - near) / (near - far) ;
}
//-------------------------------------------------

vec3 to_gamma(vec3 color) {
  vec3 ret;
  ret.r = pow(color.r, 2.2);
  ret.g = pow(color.g, 2.2);
  ret.b = pow(color.b, 2.2);
	return ret;
}

vec3 from_gamma(vec3 color) {
  vec3 ret;
  ret.r = pow(color.r, 1.0/2.2);
  ret.g = pow(color.g, 1.0/2.2);
  ret.b = pow(color.b, 1.0/2.2);
	return ret;
}

vec3 pow3(vec3 col, float exponent) {
  vec3 ret;
  ret.r = pow(col.r, exponent);
  ret.g = pow(col.g, exponent);
  ret.b = pow(col.b, exponent);
  return ret;
}

/*
 1 - Get texel
 2 - Get normal
 3 - Get depth
 4 - Translate world position from screen position
 5 - Reflect from normal
 6 - Get reflecded position and translate to screen position
 7 - Get screen depth from translated reflect position
 8 - Check ray len, check UV hit , fix L step for new interation
 9 - if UV overflow return miss error, if no go next step
 10 - use randomise normal map for get best result
*/

void main() {
  
  //get texel position in world space
  float depth = texture2D(depth_texture, fTexcoord).r;
  vec3 position_clip = vec3(fTexcoord.xy , perspective_depth(depth, cam_near, cam_far)) * 2.0 - 1.0;
  vec4 position =  cam_inv_view*cam_inv_proj  * vec4(position_clip, 1);
  position = position / position.w ;

  //SSLR - Very simple implementation, bad result, good for start experiments
  vec3  ray_color = vec3(0,0,0);
  vec4  normal = texture2D(normal_texture,fTexcoord);

  vec3  eye    = normalize( position.xyz - cam_pose );  // camera direction
  vec3  R      = normalize(reflect(normalize(eye),normalize(normal.rgb))); // reflect from camera dir to texel
  float gloss  = clamp(mod(normal.a,1.0)*1000,0,1); 
  float frenel = clamp(pow(1-dot(-1.5*eye,normal.rgb),1.0),0,1); // use for fix reflection angle (reflect_color*frenel)

  float error = 0;
  if(gloss > 0.0) // compute only glossiness pixels, need value in material.mat
  {

    vec2  screen_coord = vec2(0);
    float L = 10; // Ray start correctiong len you can set other value 
    float sample_depth = 0;
    float depth = 0;
    float error = 0;
    vec3  env = vec3(0);
    int ii = 2;

    // steps i <10 but you can set i < 1 if eye angle over 100 you get coll result and faster
   //  but if angle 45 you get trash. Need to play with values L and i interations depending on the scene
    for(int i = 0; i < 10; i++)
    {
        vec3 new_pos = position.xyz+R*L; // correcting reflect ray 

       //translate new check pose from world to screen
       // for get uv for get depth from screen space
        vec4 new_pos_proj = cam_proj * cam_view * vec4(new_pos,1);
        sample_depth = new_pos_proj.z ;
        new_pos_proj = new_pos_proj/new_pos_proj.w;
        vec2 sample_uv = vec2(0);
        sample_uv.x = (new_pos_proj.x+1)*0.5;
        sample_uv.y = (new_pos_proj.y+1)*0.5;

        float hit_depth = texture2D(depth_texture,sample_uv).r;
       
       //translate hit sreen pose to hit world pose
        vec3 hit_position_clip = vec3(fTexcoord.xy , perspective_depth(hit_depth, cam_near, cam_far)) * 2.0 - 1.0;
        vec4 hit_position =  cam_inv_view*cam_inv_proj  * vec4(hit_position_clip, 1);
        hit_position =( hit_position / hit_position.w) ;
      
        //if ray len to uv over screen texture return error becouse ray miss 
        if(sample_uv.x < -0.1 || sample_uv.x > 1.1 || sample_uv.y < -0.1 || sample_uv.y > 1.1)
        {
            error = 1;
            screen_coord = fTexcoord;
            break;
        }

        L = length(hit_position.xyz - position.xyz ); //ray len 

        if(abs(depth - hit_depth) > 0 )
        {
            L +=(L*0.5); // add ray len step

        }else {
            L -=(L*0.5); // del ray len step
        }
        screen_coord = sample_uv; //reflect color uv pose 
    }

    vec4 ccc = texture2D(ldr_texture,fTexcoord); //texel color
    vec4 ppp = texture2D(ldr_texture,screen_coord);//reflected color

     //Soft transition uncoment for see
     //gloss = clamp(gloss - screen_coord.y,0,1);
    
    //dotn show reflect if ray miss
    if(error==1)
    {
        gloss =0; 
    }
       

    ray_color =mix(ccc.rgb,ppp.rgb,gloss);
    gl_FragColor.rgb = to_gamma(ray_color.xyz);
    gl_FragColor.a = 1.0;

  }else{
    gl_FragColor.rgb = to_gamma( texture2D(ldr_texture, fTexcoord).rgb);
    gl_FragColor.a = 1.0;
  }
} 

Multiple definition error on compiling

Hi I am new here and try to learn this light engine and practice my C in a more fun way, but now the compiling is not successful due to a lot of "multiple definition errors":

gcc obj/cengine.o obj/cnet.o obj/cphysics.o obj/corange.o obj/casset.o obj/cui.o obj/centity.o obj/cgraphics.o obj/cjoystick.o obj/caudio.o obj/ui_style.o obj/ui_slider.o obj/ui_toast.o obj/ui_rectangle.o obj/ui_text.o obj/ui_option.o obj/ui_button.o obj/ui_listbox.o obj/ui_dialog.o obj/ui_textbox.o obj/ui_spinner.o obj/ui_browser.o obj/renderable.o obj/texture.o obj/music.o obj/lang.o obj/config.o obj/shader.o obj/animation.o obj/font.o obj/effect.o obj/terrain.o obj/material.o obj/cmesh.o obj/sound.o obj/image.o obj/skeleton.o obj/instance_object.o obj/landscape.o obj/animated_object.o obj/light.o obj/physics_object.o obj/particles.o obj/camera.o obj/static_object.o obj/dict.o obj/list.o obj/vertex_list.o obj/int_list.o obj/randf.o obj/vertex_hashtable.o obj/spline.o obj/renderer.o obj/sky.o obj/SDL_local.o -lSDL2 -lSDL2_mixer -lSDL2_net -shared -g -lGL -o libcorange.so /usr/bin/ld: obj/cnet.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/cnet.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/cnet.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/cnet.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/cnet.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/cnet.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/cphysics.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/cphysics.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/cphysics.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/cphysics.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/cphysics.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/cphysics.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/corange.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/corange.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/corange.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/corange.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/corange.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/corange.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/casset.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/casset.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/casset.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/casset.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/casset.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/casset.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/cui.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/cui.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/cui.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/cui.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/cui.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/cui.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/centity.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/centity.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/centity.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/centity.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/centity.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/centity.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/cgraphics.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/cgraphics.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/cgraphics.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/cgraphics.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/cgraphics.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/cgraphics.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/cjoystick.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/cjoystick.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/cjoystick.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/cjoystick.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/cjoystick.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/cjoystick.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/caudio.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/caudio.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/caudio.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/caudio.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/caudio.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/caudio.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/ui_style.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/ui_style.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/ui_style.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/ui_style.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/ui_style.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/ui_style.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/ui_slider.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/ui_slider.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/ui_slider.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/ui_slider.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/ui_slider.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/ui_slider.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/ui_toast.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/ui_toast.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/ui_toast.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/ui_toast.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/ui_toast.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/ui_toast.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/ui_rectangle.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/ui_rectangle.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/ui_rectangle.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/ui_rectangle.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/ui_rectangle.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/ui_rectangle.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/ui_text.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/ui_text.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/ui_text.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/ui_text.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/ui_text.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/ui_text.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/ui_option.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/ui_option.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/ui_option.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/ui_option.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/ui_option.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/ui_option.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/ui_button.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/ui_button.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/ui_button.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/ui_button.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/ui_button.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/ui_button.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/ui_listbox.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/ui_listbox.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/ui_listbox.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/ui_listbox.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/ui_listbox.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/ui_listbox.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/ui_dialog.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/ui_dialog.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/ui_dialog.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/ui_dialog.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/ui_dialog.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/ui_dialog.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/ui_textbox.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/ui_textbox.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/ui_textbox.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/ui_textbox.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/ui_textbox.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/ui_textbox.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/ui_spinner.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/ui_spinner.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/ui_spinner.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/ui_spinner.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/ui_spinner.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/ui_spinner.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/ui_browser.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/ui_browser.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/ui_browser.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/ui_browser.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/ui_browser.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/ui_browser.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/renderable.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/renderable.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/renderable.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/renderable.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/renderable.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/renderable.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/texture.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/texture.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/texture.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/texture.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/texture.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/texture.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/music.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/music.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/music.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/music.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/music.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/music.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/lang.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/lang.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/lang.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/lang.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/lang.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/lang.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/config.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/config.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/config.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/config.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/config.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/config.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/shader.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/shader.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/shader.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/shader.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/shader.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/shader.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/animation.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/animation.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/animation.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/animation.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/animation.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/animation.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/font.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/font.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/font.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/font.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/font.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/font.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/effect.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/effect.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/effect.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/effect.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/effect.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/effect.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/terrain.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/terrain.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/terrain.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/terrain.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/terrain.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/terrain.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/material.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/material.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/material.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/material.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/material.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/material.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/cmesh.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/cmesh.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/cmesh.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/cmesh.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/cmesh.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/cmesh.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/sound.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/sound.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/sound.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/sound.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/sound.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/sound.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/image.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/image.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/image.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/image.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/image.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/image.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/skeleton.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/skeleton.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/skeleton.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/skeleton.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/skeleton.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/skeleton.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/instance_object.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/instance_object.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/instance_object.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/instance_object.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/instance_object.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/instance_object.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/landscape.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/landscape.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/landscape.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/landscape.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/landscape.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/landscape.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/animated_object.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/animated_object.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/animated_object.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/animated_object.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/animated_object.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/animated_object.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/light.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/light.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/light.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/light.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/light.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/light.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/physics_object.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/physics_object.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/physics_object.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/physics_object.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/physics_object.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/physics_object.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/particles.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/particles.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/particles.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/particles.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/particles.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/particles.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/camera.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/camera.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/camera.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/camera.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/camera.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/camera.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/static_object.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/static_object.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/static_object.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/static_object.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/static_object.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/static_object.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/dict.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/dict.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/dict.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/dict.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/dict.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/dict.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/list.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/list.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/list.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/list.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/list.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/list.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/vertex_list.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/vertex_list.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/vertex_list.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/vertex_list.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/vertex_list.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/vertex_list.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/int_list.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/int_list.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/int_list.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/int_list.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/int_list.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/int_list.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/randf.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/randf.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/randf.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/randf.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/randf.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/randf.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/vertex_hashtable.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/vertex_hashtable.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/vertex_hashtable.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/vertex_hashtable.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/vertex_hashtable.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/vertex_hashtable.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/spline.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/spline.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/spline.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/spline.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/spline.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/spline.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/renderer.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/renderer.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here /usr/bin/ld: obj/renderer.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/renderer.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/renderer.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/renderer.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/sky.o:/home/qs/Corange/./include/cengine.h:80: multiple definition of debug_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:80: first defined here
/usr/bin/ld: obj/sky.o:/home/qs/Corange/./include/cengine.h:79: multiple definition of debug_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:79: first defined here /usr/bin/ld: obj/sky.o:/home/qs/Corange/./include/cengine.h:77: multiple definition of warning_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:77: first defined here
/usr/bin/ld: obj/sky.o:/home/qs/Corange/./include/cengine.h:76: multiple definition of warning_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:76: first defined here /usr/bin/ld: obj/sky.o:/home/qs/Corange/./include/cengine.h:74: multiple definition of error_str'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:74: first defined here
/usr/bin/ld: obj/sky.o:/home/qs/Corange/./include/cengine.h:73: multiple definition of error_buf'; obj/cengine.o:/home/qs/Corange/./include/cengine.h:73: first defined here collect2: error: ld returned 1 exit status make: *** [Makefile:37: libcorange.so] Error 1

OpenGL Error: Invalid Enum (running rendering demo)

I've been able to get some of the other demos to work but when I go to run the rendering demo I get the following output:

[DEBUG] (src/corange.c:corange_init:53) Starting Corange...
[DEBUG] (src/corange.c:corange_init:56) Creating Asset Manager...
[DEBUG] (src/corange.c:corange_init:57) Core Assets At '../../assets_core' ...
[DEBUG] (src/corange.c:corange_init:95) Creating Entity Manager...
[DEBUG] (src/corange.c:corange_init:110) Creating UI Manager...
[DEBUG] (src/corange.c:corange_init:127) Creating Graphics Manager...
OpenGL Info
Vendor: VMware, Inc.
Renderer: Gallium 0.4 on llvmpipe (LLVM 3.8, 256 bits)
Version: 3.0 Mesa 12.0.6
Shader Version: 1.30


Extensions here


[DEBUG] (src/corange.c:corange_init:131) Creating Audio Manager...
[DEBUG] (src/corange.c:corange_init:135) Creating Joystick Manager...
[DEBUG] (src/cjoystick.c:joystick_init:16) Found 0 joysticks
[DEBUG] (src/corange.c:corange_init:139) Creating Network Manager...
[DEBUG] (src/corange.c:corange_init:142) Finished!
[DEBUG] (src/casset.c:folder_load:308) Loading Folder: '/home//Dev/Corange-master/demos/rendering/assets/podium'
[DEBUG] (src/casset.c:file_load:282) Loading: '/home//Dev/Corange-master/demos/rendering/assets/podium/podium.dds'
[ERROR] (src/assets/texture.c:dds_load_file:572) OpenGL Error: Invalid Enum

Can't compile on Windows with MinGW! Too many errors, can't configure!

Hi @orangeduck :)
It's been a few days since I'm trying to get this to work, I use elementaryOS in VMWare Workstation, I installed SDL libs and compiled it compiles clean, now I seriously don't know if it creates an executable or what, though I tried executing the compiled files, no luck though. I now know it compiles to a library(much like a dll on Windows).
Anyway metaballs didn't compile. Rest compile but don't run(execute but don't render) except for Platformer(cool game) and sea(really bad graphics don't know why). I think it's because of virtual machine, that's why it can't use my GPU to render out things properly?

That's why I returned to Windows 10, installed SDL dev libraries for Visual Studio(my main IDE), tried my best, couldn't get it to work. Tried other things with SDL, they worked like a charm, Corange didn't.

Next came MinGW, installed dev libraries, linked them. tonnes of errors(redefinitions and what not in SDL_Local.h, SDL_Local.c and SDL_opengl), fixed an error by commenting a block of code, worked and it compiled almost every src to obj except it stuck somewhere in the end, now can't fix that one. Fiddled, but no luck.

Can you please help me?
Do you happen to have a Visual Studio project of Corange? Are you able to run it MinGW?
If yes! help to do so too!

PS: I recently completed your book! It was an excellent source of learning C, please do check my repositories for my Lispi, well wait here's the link Lispi.
Thanks

Cannot compile demo "metaballs"

gcc src/volume_renderer.c -c -I ./include -I ../../include -std=gnu99 -Wall -Werror -Wno-unused -O3 -g -o obj/volume_renderer.o
In file included from /usr/include/CL/cl.h:32,
                 from ./include/kernel.h:5,
                 from src/volume_renderer.c:4:
/usr/include/CL/cl_version.h:34:9: note: #pragma message: cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 220 (OpenCL 2.2)
   34 | #pragma message("cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 220 (OpenCL 2.2)")
      |         ^~~~~~~
gcc src/marching_cubes.c -c -I ./include -I ../../include -std=gnu99 -Wall -Werror -Wno-unused -O3 -g -o obj/marching_cubes.o
In file included from /usr/include/CL/cl.h:32,
                 from ./include/kernel.h:5,
                 from ./include/marching_cubes.h:6,
                 from src/marching_cubes.c:3:
/usr/include/CL/cl_version.h:34:9: note: #pragma message: cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 220 (OpenCL 2.2)
   34 | #pragma message("cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 220 (OpenCL 2.2)")
      |         ^~~~~~~
gcc src/metaballs.c -c -I ./include -I ../../include -std=gnu99 -Wall -Werror -Wno-unused -O3 -g -o obj/metaballs.o
In file included from /usr/include/CL/cl.h:32,
                 from ./include/kernel.h:5,
                 from ./include/particles.h:6,
                 from src/metaballs.c:2:
/usr/include/CL/cl_version.h:34:9: note: #pragma message: cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 220 (OpenCL 2.2)
   34 | #pragma message("cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 220 (OpenCL 2.2)")
      |         ^~~~~~~
gcc src/particles.c -c -I ./include -I ../../include -std=gnu99 -Wall -Werror -Wno-unused -O3 -g -o obj/particles.o
In file included from /usr/include/CL/cl.h:32,
                 from ./include/kernel.h:5,
                 from ./include/particles.h:6,
                 from src/particles.c:1:
/usr/include/CL/cl_version.h:34:9: note: #pragma message: cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 220 (OpenCL 2.2)
   34 | #pragma message("cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 220 (OpenCL 2.2)")
      |         ^~~~~~~
gcc src/kernel.c -c -I ./include -I ../../include -std=gnu99 -Wall -Werror -Wno-unused -O3 -g -o obj/kernel.o
In file included from /usr/include/CL/cl.h:32,
                 from ./include/kernel.h:5,
                 from src/kernel.c:1:
/usr/include/CL/cl_version.h:34:9: note: #pragma message: cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 220 (OpenCL 2.2)
   34 | #pragma message("cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 220 (OpenCL 2.2)")
      |         ^~~~~~~
src/kernel.c: In function ‘kernels_init’:
src/kernel.c:36:3: error: ‘clCreateCommandQueue’ is deprecated [-Werror=deprecated-declarations]
   36 |   queue = clCreateCommandQueue(context, device, 0, &error);
      |   ^~~~~
In file included from ./include/kernel.h:5,
                 from src/kernel.c:1:
/usr/include/CL/cl.h:1781:1: note: declared here
 1781 | clCreateCommandQueue(cl_context                     context,
      | ^~~~~~~~~~~~~~~~~~~~
src/kernel.c: In function ‘kernels_init_with_cpu’:
src/kernel.c:54:3: error: ‘clCreateCommandQueue’ is deprecated [-Werror=deprecated-declarations]
   54 |   queue = clCreateCommandQueue(context, device, 0, &error);
      |   ^~~~~
In file included from ./include/kernel.h:5,
                 from src/kernel.c:1:
/usr/include/CL/cl.h:1781:1: note: declared here
 1781 | clCreateCommandQueue(cl_context                     context,
      | ^~~~~~~~~~~~~~~~~~~~
src/kernel.c: In function ‘kernels_init_with_opengl’:
src/kernel.c:101:3: error: ‘clCreateCommandQueue’ is deprecated [-Werror=deprecated-declarations]
  101 |   queue = clCreateCommandQueue(context, device, 0, &error);
      |   ^~~~~
In file included from ./include/kernel.h:5,
                 from src/kernel.c:1:
/usr/include/CL/cl.h:1781:1: note: declared here
 1781 | clCreateCommandQueue(cl_context                     context,
      | ^~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make: *** [Makefile:31:obj/kernel.o] error 1

Make can't find rule for obj/SDL_local.o

A strange error is occurring when using Make.

$ make
gcc src/cengine.c -c -I ./include -std=gnu99 -Wall -Werror -Wno-unused -O3 -g -fPIC -o obj/cengine.o
gcc src/casset.c -c -I ./include -std=gnu99 -Wall -Werror -Wno-unused -O3 -g -fPIC -o obj/casset.o
gcc src/corange.c -c -I ./include -std=gnu99 -Wall -Werror -Wno-unused -O3 -g -fPIC -o obj/corange.o
gcc src/cui.c -c -I ./include -std=gnu99 -Wall -Werror -Wno-unused -O3 -g -fPIC -o obj/cui.o
gcc src/centity.c -c -I ./include -std=gnu99 -Wall -Werror -Wno-unused -O3 -g -fPIC -o obj/centity.o
gcc src/cgraphics.c -c -I ./include -std=gnu99 -Wall -Werror -Wno-unused -O3 -g -fPIC -o obj/cgraphics.o
gcc src/cjoystick.c -c -I ./include -std=gnu99 -Wall -Werror -Wno-unused -O3 -g -fPIC -o obj/cjoystick.o
gcc src/caudio.c -c -I ./include -std=gnu99 -Wall -Werror -Wno-unused -O3 -g -fPIC -o obj/caudio.o
make: *** No rule to make target `obj/SDL_local.o', needed by `libcorange.so'.  Stop.

The rule is specified by:

obj/%.o: src/*/%.c | obj
    $(CC) $< -c $(CFLAGS) -o $@

and src/SDL/SDL_local.c exists.

Running Arch linux, using GCC 4.8.1 and GNU Make 3.82.

Attempted to build on OS X: Lots of OpenGL redefinitions

Here's the output (built with clang in this case, but same errors with gcc-4.9):

gcc src/casset.c -c -I ./include -std=gnu99 -Wall -Werror -Wno-unused -O3 -g -fPIC -o obj/casset.o
In file included from src/casset.c:1:
In file included from ./include/casset.h:24:
In file included from ./include/cengine.h:34:
./include/SDL2/SDL_local.h:116:28: error: redefinition of 'glActiveTexture' as
      different kind of symbol
  extern GLACTIVETEXTUREFN glActiveTexture;
                           ^
/System/Library/Frameworks/OpenGL.framework/Headers/gl.h:2769:13: note:
      previous definition is here
extern void glActiveTexture (GLenum texture);
            ^
In file included from src/casset.c:1:
In file included from ./include/casset.h:24:
In file included from ./include/cengine.h:34:
./include/SDL2/SDL_local.h:117:35: error: redefinition of
      'glCompressedTexImage2D' as different kind of symbol
  extern GLCOMPRESSEDTEXIMAGE2DFN glCompressedTexImage2D;
                                  ^
/System/Library/Frameworks/OpenGL.framework/Headers/gl.h:2762:13: note:
      previous definition is here
extern void glCompressedTexImage2D (GLenum target, GLint level, GLenum i...
            ^
In file included from src/casset.c:1:
In file included from ./include/casset.h:24:
In file included from ./include/cengine.h:34:
./include/SDL2/SDL_local.h:118:25: error: redefinition of 'glTexImage3D' as
      different kind of symbol
  extern GLTEXIMAGE3DFN glTexImage3D;
                        ^
/System/Library/Frameworks/OpenGL.framework/Headers/gl.h:2717:13: note:
      previous definition is here
extern void glTexImage3D (GLenum target, GLint level, GLint internalform...
            ^
In file included from src/casset.c:1:
In file included from ./include/casset.h:24:
In file included from ./include/cengine.h:34:
./include/SDL2/SDL_local.h:120:25: error: redefinition of 'glCreateShader' as
      different kind of symbol
extern GLCREATESHADERFN glCreateShader;
                        ^
/System/Library/Frameworks/OpenGL.framework/Headers/gl.h:2922:15: note:
      previous definition is here
extern GLuint glCreateShader (GLenum type);
              ^
In file included from src/casset.c:1:
In file included from ./include/casset.h:24:
In file included from ./include/cengine.h:34:
./include/SDL2/SDL_local.h:121:26: error: redefinition of 'glCreateProgram' as
      different kind of symbol
extern GLCREATEPROGRAMFN glCreateProgram;
                         ^
/System/Library/Frameworks/OpenGL.framework/Headers/gl.h:2925:15: note:
      previous definition is here
extern GLuint glCreateProgram (void);
              ^
In file included from src/casset.c:1:
In file included from ./include/casset.h:24:
In file included from ./include/cengine.h:34:
./include/SDL2/SDL_local.h:122:25: error: redefinition of 'glShaderSource' as
      different kind of symbol
extern GLSHADERSOURCEFN glShaderSource;
                        ^
/System/Library/Frameworks/OpenGL.framework/Headers/gl.h:2923:13: note:
      previous definition is here
extern void glShaderSource (GLuint shader, GLsizei count, const GLchar* ...
            ^
In file included from src/casset.c:1:
In file included from ./include/casset.h:24:
In file included from ./include/cengine.h:34:
./include/SDL2/SDL_local.h:123:26: error: redefinition of 'glCompileShader' as
      different kind of symbol
extern GLCOMPILESHADERFN glCompileShader;
                         ^
/System/Library/Frameworks/OpenGL.framework/Headers/gl.h:2924:13: note:
      previous definition is here
extern void glCompileShader (GLuint shader);
            ^
In file included from src/casset.c:1:
In file included from ./include/casset.h:24:
In file included from ./include/cengine.h:34:
./include/SDL2/SDL_local.h:124:29: error: redefinition of 'glGetShaderInfoLog'
      as different kind of symbol
extern GLGETSHADERINFOLOGFN glGetShaderInfoLog;
                            ^
/System/Library/Frameworks/OpenGL.framework/Headers/gl.h:2955:13: note:
      previous definition is here
extern void glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei ...
            ^
In file included from src/casset.c:1:
In file included from ./include/casset.h:24:
In file included from ./include/cengine.h:34:
./include/SDL2/SDL_local.h:125:25: error: redefinition of 'glAttachShader' as
      different kind of symbol
extern GLATTACHSHADERFN glAttachShader;
                        ^
/System/Library/Frameworks/OpenGL.framework/Headers/gl.h:2926:13: note:
      previous definition is here
extern void glAttachShader (GLuint program, GLuint shader);
            ^
In file included from src/casset.c:1:
In file included from ./include/casset.h:24:
In file included from ./include/cengine.h:34:
./include/SDL2/SDL_local.h:126:24: error: redefinition of 'glLinkProgram' as
      different kind of symbol
extern GLLINKPROGRAMFN glLinkProgram;
                       ^
/System/Library/Frameworks/OpenGL.framework/Headers/gl.h:2927:13: note:
      previous definition is here
extern void glLinkProgram (GLuint program);
            ^
In file included from src/casset.c:1:
In file included from ./include/casset.h:24:
In file included from ./include/cengine.h:34:
./include/SDL2/SDL_local.h:127:30: error: redefinition of 'glGetProgramInfoLog'
      as different kind of symbol
extern GLGETPROGRAMINFOLOGFN glGetProgramInfoLog;
                             ^
/System/Library/Frameworks/OpenGL.framework/Headers/gl.h:2956:13: note:
      previous definition is here
extern void glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsize...
            ^
In file included from src/casset.c:1:
In file included from ./include/casset.h:24:
In file included from ./include/cengine.h:34:
./include/SDL2/SDL_local.h:128:22: error: redefinition of 'glIsProgram' as
      different kind of symbol
extern GLISPROGRAMFN glIsProgram;
                     ^
/System/Library/Frameworks/OpenGL.framework/Headers/gl.h:2951:18: note:
      previous definition is here
extern GLboolean glIsProgram (GLuint program);
                 ^
In file included from src/casset.c:1:
In file included from ./include/casset.h:24:
In file included from ./include/cengine.h:34:
./include/SDL2/SDL_local.h:129:21: error: redefinition of 'glIsShader' as
      different kind of symbol
extern GLISSHADERFN glIsShader;
                    ^
/System/Library/Frameworks/OpenGL.framework/Headers/gl.h:2950:18: note:
      previous definition is here
extern GLboolean glIsShader (GLuint shader);
                 ^
In file included from src/casset.c:1:
In file included from ./include/casset.h:24:
In file included from ./include/cengine.h:34:
./include/SDL2/SDL_local.h:130:31: error: redefinition of 'glGetAttachedShaders'
      as different kind of symbol
extern GLGETATTACHEDSHADERSFN glGetAttachedShaders;
                              ^
/System/Library/Frameworks/OpenGL.framework/Headers/gl.h:2954:13: note:
      previous definition is here
extern void glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsi...
            ^
In file included from src/casset.c:1:
In file included from ./include/casset.h:24:
In file included from ./include/cengine.h:34:
./include/SDL2/SDL_local.h:131:31: error: redefinition of 'glGetUniformLocation'
      as different kind of symbol
extern GLGETUNIFORMLOCATIONFN glGetUniformLocation;
                              ^
/System/Library/Frameworks/OpenGL.framework/Headers/gl.h:2957:14: note:
      previous definition is here
extern GLint glGetUniformLocation (GLuint program, const GLchar *name);
             ^
In file included from src/casset.c:1:
In file included from ./include/casset.h:24:
In file included from ./include/cengine.h:34:
./include/SDL2/SDL_local.h:132:22: error: redefinition of 'glUniform1f' as
      different kind of symbol
extern GLUNIFORM1FFN glUniform1f;
                     ^
/System/Library/Frameworks/OpenGL.framework/Headers/gl.h:2931:13: note:
      previous definition is here
extern void glUniform1f (GLint location, GLfloat v0);
            ^
In file included from src/casset.c:1:
In file included from ./include/casset.h:24:
In file included from ./include/cengine.h:34:
./include/SDL2/SDL_local.h:133:22: error: redefinition of 'glUniform1i' as
      different kind of symbol
extern GLUNIFORM1IFN glUniform1i;
                     ^
/System/Library/Frameworks/OpenGL.framework/Headers/gl.h:2935:13: note:
      previous definition is here
extern void glUniform1i (GLint location, GLint v0);
            ^
In file included from src/casset.c:1:
In file included from ./include/casset.h:24:
In file included from ./include/cengine.h:34:
./include/SDL2/SDL_local.h:134:25: error: redefinition of 'glDeleteShader' as
      different kind of symbol
extern GLDELETESHADERFN glDeleteShader;
                        ^
/System/Library/Frameworks/OpenGL.framework/Headers/gl.h:2920:13: note:
      previous definition is here
extern void glDeleteShader (GLuint shader);
            ^
In file included from src/casset.c:1:
In file included from ./include/casset.h:24:
In file included from ./include/cengine.h:34:
./include/SDL2/SDL_local.h:135:26: error: redefinition of 'glDeleteProgram' as
      different kind of symbol
extern GLDELETEPROGRAMFN glDeleteProgram;
                         ^
/System/Library/Frameworks/OpenGL.framework/Headers/gl.h:2929:13: note:
      previous definition is here
extern void glDeleteProgram (GLuint program);
            ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
make: *** [obj/casset.o] Error 1

Should I be linking with a different library or do I manually have to go and redefine all the functions?

SDL2/SDL_mixer.h: no such file ro directory

I tried make with GCC 4.8.4 on my Ubuntu 14.10 box 64-bit, and I have SDL2 and SDL2-mixer and SDL2-net previously installed including libsdl2-dev. Is it simply renaming the file to something else? SDL_mixer to SDL2-mixer? PS: I bought your book, so I was pleasantly surprised to stumble upon Corange!

In file included from ./include/casset.h:24:0,
                 from src/casset.c:1:
./include/cengine.h:32:28: fatal error: SDL2/SDL_mixer.h: No such file or directory
 #include <SDL2/SDL_mixer.h>
                            ^
compilation terminated.
make: *** [obj/casset.o] Error 1

Porting to GLES via Android

I know Dan, isn't maintaining this project anymore but if anyone else is interested in Android support this is what I've got:
My Android.mk file is:
https://github.com/gwald/my-corange-demo/blob/master/Android.mk
There's a few hacks I had to do:
1, creating SDL2 folders with hearders for SDL source, due to code having <SDL2/sdl.h>
2, in file: jni/corange/src/SDL2/SDL_local.c comment out line 15: #include <execinfo.h>

Anyway, that's really hacky, not sure what's the best way forward, but it works, kind of :/
I'm not an Android expert, nor anything else really!

I was hoping to target GLESv2, but v3 gives errors.
Using android-19 which has GLESv3

[armeabi] SharedLibrary : libcorange.so
jni/corange/src/assets/texture.c:73: error: undefined reference to 'glGetTexLevelParameteriv'
jni/corange/src/assets/texture.c:74: error: undefined reference to 'glGetTexLevelParameteriv'
jni/corange/src/assets/texture.c:75: error: undefined reference to 'glGetTexLevelParameteriv'
jni/corange/src/assets/texture.c:89: error: undefined reference to 'glGetTexImage'
jni/corange/src/assets/texture.c:95: error: undefined reference to 'glGetTexImage'
jni/corange/src/assets/texture.c:113: error: undefined reference to 'glGetTexImage'
jni/corange/src/assets/texture.c:131: error: undefined reference to 'glGetTexImage'
jni/corange/src/assets/texture.c:229: error: undefined reference to 'glTexImage3D'
jni/corange/src/assets/texture.c:249: error: undefined reference to 'glGetTexLevelParameteriv'
jni/corange/src/assets/texture.c:617: error: undefined reference to 'glTexImage3D'
jni/corange/src/rendering/renderer.c:375: error: undefined reference to 'glDrawBuffer'
jni/corange/src/rendering/renderer.c:376: error: undefined reference to 'glReadBuffer'
jni/corange/src/rendering/renderer.c:862: error: undefined reference to 'glClearDepth'
jni/corange/src/rendering/renderer.c:916: error: undefined reference to 'glClearDepth'
jni/corange/src/rendering/renderer.c:1376: error: undefined reference to 'glPointSize'
jni/corange/src/rendering/renderer.c:1391: error: undefined reference to 'glPointSize'
jni/corange/src/rendering/renderer.c:1426: error: undefined reference to 'glPointSize'
jni/corange/src/rendering/renderer.c:1436: error: undefined reference to 'glPointSize'
jni/corange/src/rendering/renderer.c:2619: error: undefined reference to 'glClearDepth'
jni/corange/src/rendering/renderer.c:2662: error: undefined reference to 'glTexEnvf'
jni/corange/src/rendering/renderer.c:2679: error: undefined reference to 'glTexEnvf'
collect2: error: ld returned 1 exit status

mkdir obj

before I was able to use make I had to create the obj folder by hand. no big deal but could irritate some beginners...

Compile issues Ubuntu

Unfortunately I have several issues compiling and executing the demos under Ubuntu:

lut_gen:
make
cp ../../libcorange.so ./lib/libcorange.a
gcc -g obj/lut_gen.o obj/spline.o -L./lib -lcorange -lGL -lSDLmain -lSDL -o lut_gen
obj/lut_gen.o: file not recognized: File format not recognized
collect2: ld returned 1 exit status
make: *** [lut_gen] Error 1

metaballs:
make
cp ../../libcorange.so ./lib/libcorange.a
gcc -g obj/kernel.o obj/marching_cubes.o obj/metaballs.o obj/particles.o obj/volume_renderer.o -L./lib -lcorange -lGL -lSDLmain -lSDL -lOpenCL -o metaballs
/usr/bin/ld: cannot find -lOpenCL
collect2: ld returned 1 exit status
make: *** [metaballs] Error 1

noise:
make
cp ../../libcorange.so ./lib/libcorange.a
gcc -g obj/noise.o obj/perlin_noise.o -L./lib -lcorange -lGL -lSDLmain -lSDL -o noise
/usr/bin/ld: i386:x86-64 architecture of input file obj/noise.o' is incompatible with i386 output /usr/bin/ld: i386:x86-64 architecture of input fileobj/perlin_noise.o' is incompatible with i386 output
collect2: ld returned 1 exit status
make: *** [noise] Error 1

I can compile platformers, renderers, scotland and sea but when I execute them I get these messages:
[DEBUG] Starting Corange...
[DEBUG] Creating Graphics Manager...
[DEBUG] OpenGL Info
[DEBUG] Vendor: NVIDIA Corporation
[DEBUG] Renderer: GeForce 9200M GE/PCI/SSE2
[DEBUG] Version: 2.1.2 NVIDIA 173.14.30
[DEBUG] Shader Version: 1.20 NVIDIA via Cg compiler
[DEBUG] Loading OpenGL Extensions...
[ERROR] src/SDL/SDL_local.c:572 Failed to load OpenGL extension glGenerateMipmap

Notice: Mesa - R600 - NIR - TGSI - translation from TGSI failed

This is just a note for those who will be affected by the problem like mine. This is not Corange problem.
But it's better to know about it.

The problem is described here:


I will only briefly summarize the main.
If you come across artifacts and graphics options like in graphics.cfg lighting = 1 and while in the terminal you see the following lines

EE ../src/gallium/drivers/r600/r600_state_common.c:961 r600_shader_select - Failed to build shader variant (type=1) -1
EE ../src/gallium/drivers/r600/r600_shader.c:193 r600_pipe_shader_create - translation from TGSI failed !

it means the shader is working now assets_core/shaders/deferred/compose.fs

4 fix options

  • 1 Fix shader
#version 120
-#define MAX_LIGHTS 32
+#define MAX_LIGHTS 8

or

-#version 120
+#version 130
#define MAX_LIGHTS 32
  • 2 Use NIR backend
$export R600_DEBUG=nir
$run_corange_app
  • 3 Wait update MESA with NIR by default

  • 4 Set in graphics.cfg lighting = 0
    for use assets_core/shaders/deferred/compose_low.fs
    Notice: shadows not working with lighting = 0 and again wait update mesa


I hope this will be useful to know and someone will be protected from tedious debugging like me 😃

Sea demo bug

After a short while, the ellipsoid disappears. I put a printf into sea_update() to see what happens to the ellipsoid's position and saw the coordinates decreasing until they hit nan at which point the disappearing happens. What's causing this? Is this part of why the physics demo adds its own physics functions?

I didn't see any of the balls disappear (although the ball count seems to be off by one) in the physics demo, and since they're constantly bouncing, I think it could be a gravity handling problem

PNG support

Is png a format the developer wishes to support? I've had to add a handler for pngs that uses libspng, I can create a PR to add it to the main project.

... how rotate camera? LoL )))

Hi, Daniel, I suddenly found that I did not understand how to adjust the angle of the camera.
I wrote a dynamic environment for a cubic map and for rendering in a cubic texture, I move the camera to the object position, but I don’t understand how to rotate the camera on six sides.

Can you give one example, for example, turning the camera
strictly up or down? And then I'll find out.

I have attached a piece of code to understand what I'm trying to do.
??

// prepare env cubemaps for surfaces
static void renderer_render_target_cubemap(renderer * dr)
{
    renderer_cubemap_dynamic_reset_counts(dr);
    vec3 cam_pos_save = dr->camera->position;

  for ( int j = 0; j < dr->render_objects_num; j++)
  {
    renderable * ren = NULL;
    if(dr->render_objects[j].type == RO_TYPE_STATIC)
    {
        dr->camera->position = dr->render_objects[j].static_object->position;
        ren = asset_hndl_ptr(&dr->render_objects[j].static_object->renderable);

    }else if(dr->render_objects[j].type == RO_TYPE_ANIMATED)
    {
        dr->camera->position = dr->render_objects[j].animated_object->position;
        ren = asset_hndl_ptr(&dr->render_objects[j].animated_object->renderable);

    }else if(dr->render_objects[j].type == RO_TYPE_INSTANCE)
    {
        //XXX: dynamic env only for one instance fix it!
        dr->camera->position = dr->render_objects[j].instance_object->instances[0].position;
        ren = asset_hndl_ptr(&dr->render_objects[j].instance_object->renderable);

    };
    GLint current_cube_texture = -1;
    for (int i = 0; i < ren->num_surfaces; ++i)
    {
       material_entry * me = material_get_entry(asset_hndl_ptr(&ren->material),i);
       if(material_entry_item(me,"envcube_dynamic").as_bool == false)
       {
            continue;
       }else{
           current_cube_texture = renderer_get_cubemap_dynamic_repare(dr);
       };
    for (int i = 0; i < 6; ++i)
    {
      
          swith(i)
          {      // help me this pleeeeeeeeeees ))))))))))))))))))))))
                 case 1:  dr->camera->target = /*????????*/ ;  break;
                 case 2:  dr->camera->target = /*????????*/ ; break;
                 case 3:  dr->camera->target = /*????????*/ ; break;
                 case 4:  dr->camera->target = /*????????*/ ; break;
                 case 5:  dr->camera->target = /*????????*/ ; break;
                 case 6:  dr->camera->target = /*????????*/ ; break;
          };
     
       dr->cubemap_dynamic_render_process = true; 
       render_shadows(dr);  
       render_clear(dr);    
       glPolygonMode( GL_FRONT_AND_BACK, dr->mode);
       render_gbuffer(dr);  
       glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
       render_ssao(dr);   
       render_skydome(dr);   
       render_skycube(dr); 
       render_compose(dr); 
       glPolygonMode( GL_FRONT_AND_BACK, dr->mode);
       render_sea(dr);    
       render_particles(dr);
       glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
       render_tonemap(dr);  
       render_post0(dr);    
       glBindFramebuffer(GL_FRAMEBUFFER, dr->cubemap_dynamic_fbo);
    glDrawBuffer(GL_COLOR_ATTACHMENT0 + i);
       glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
       glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i,
                              GL_TEXTURE_CUBE_MAP_POSITIVE_X       + i,
                              current_cube_texture, 0);

       render_post1(dr);    
    glBindFramebuffer(GL_FRAMEBUFFER, 0);
       dr->cubemap_dynamic_render_process = false;

    };

  };
 };
    dr->camera->position = cam_pos_save;
    renderer_set_camera(dr,dr->camera);
}

Next just render scene

Asset Reloading

Currently asset reloading is causing a bunch of issues.

The main issue is that objects which store direct pointers to assets (E.G renderable->material) get invalidated if somewhere else in the system the asset pointed to is reloaded.

It seems that objects sharing assets in unavoidable so this reloading is always going to happen in one form or another. Unless very careful steps are taken this will increase to be an issue. I see a few options:

1. Ensure objects never hold pointers directly to assets.
This solution is annoying because it causes a performance overhead (in the lookup) and forces objects to store string identifiers which means more memory management and are just generally a pain.
An alternative to string identifiers is to store a pointer to an asset pointer. If this were the case the asset manager could still manipulate the second pointer and change it at reload time. This is faster and less hassle than storing the string identifier but still a pain, and still relies on policy that no object holds pointers directly to assets.

2. Ensure assets reload into the same location.
This is appealing for many reasons but it rings alarm bells in my head because I am sure there will be unforeseen issues. It would require some serious adaptions to the asset manager but should be viable.
One potential issue is that pointers inside an asset struct become different on reload. But providing no exterior objects hold pointers one level deep into an asset this should be okay.
Another issue is that if someone does an "unload" and "load" rather than a "reload" it is impossible to ensure the asset is loaded again into the same location and so it may still cause invalidation.

Until more bright ideas come up I will continue in consideration.

Advice on animation blending

Hi Daniel,
I'm looking at extending Corange, I don't mind sharing/uploading my changes etc.
So I thought I would ask you first before I hack it horribly.

Just wondering if you can advise regarding adding animation blending, ie top and bottom biped animations.
I'm still new, but I know my way around, so just any general points would be helpful.

Cheers
gwald

bmf format, what is it?

I read code bmf_load_file but i don`t understand it (
maybe you prompt me what is it? that the specification for him? ::)

GCC 4.8.3 compile failure

src/assets/config.c: In function ‘cfg_save_file’:
src/assets/config.c:75:8: error: trampoline generated for nested function ‘write_entry’ [-Werror=trampolines]
   void write_entry(void* x) {

Also fails on versions 4.7.3 and 4.9.2

Why do the "mesh" and "model" types exist?

In the "cengine" code, the types "mesh" and "model" are defined to handle 3D objects. That makes sense, but what puzzles me is why these types are never used in Corange itself. Instead, whenever the engine actually deals with 3D objects the "cmesh" type gets used instead. Furthermore, "cmesh" does not use "mesh" nor "model" internally to represent it's structure.

My question is, why then do "mesh" and "model" exist at all? Should "cmesh" be changed to internally be based on "mesh"/"model"? I'm curious about the reason it was designed this way.

SDL currently breaks MinGW Compile (For some time now?) Temp Fix Herein

After following the trail of the includes through the sound advice offered here: #66

I found myself in a chicken vs. egg dilemma. Apparently--although SDL targets MinGW with it's releases--this issue from 2016 is still encountered whether compiling on Linux for Windows, or on Windows for Windows, when using MinGW:

https://discourse.libsdl.org/t/glactivetexture-declaration/22001

For now, I've commented out the offending
"GLAPI void GLAPIENTRY glActiveTexture( . . . . . ." ,
"GLAPI void GLAPIENTRY glCompressedTexImage2D( . . . . . .",
"GLAPI void GLAPIENTRY glTexImage3D( . . . . . ."
lines in SDL_opengl.h with success.

I plan to follow the advice in the link above and wrap it all together in a block of

#if !defined(__MINGW32__)
[ . . . ]
#endif

as that is the verified preset #define flag on at least the Windows .exe version of MinGW.

Segmentation Fault

After compiling demos and executing them, I get the following error...

[ERROR] (src/corange.c:corange_signal:9) Segmentation fault

Any help would be appreciated..
Here is the full output

[DEBUG] (src/corange.c:corange_init:53) Starting Corange...
[DEBUG] (src/corange.c:corange_init:56) Creating Asset Manager...
[DEBUG] (src/corange.c:corange_init:57) Core Assets At '../../assets_core' ...
[DEBUG] (src/corange.c:corange_init:95) Creating Entity Manager...
[DEBUG] (src/corange.c:corange_init:110) Creating UI Manager...
[DEBUG] (src/corange.c:corange_init:127) Creating Graphics Manager...
[DEBUG] (src/corange.c:corange_init:131) Creating Audio Manager...
[DEBUG] (src/corange.c:corange_init:135) Creating Joystick Manager...
[DEBUG] (src/cjoystick.c:joystick_init:16) Found 0 joysticks
[DEBUG] (src/corange.c:corange_init:139) Creating Network Manager...
[DEBUG] (src/corange.c:corange_init:142) Finished!
[DEBUG] (src/casset.c:folder_load:308) Loading Folder: 'C:\Users---\Corange\demos\rendering\assets\podium'
[DEBUG] (src/casset.c:file_load:282) Loading: 'C:\Users---\Corange\demos\rendering\assets\podium\podium.bmf'
[DEBUG] (src/casset.c:file_load:282) Loading: 'C:\Users---\Corange\demos\rendering\assets\podium\podium.mat'
[DEBUG] (src/casset.c:file_load:282) Loading: 'C:\Users---\Corange\demos\rendering\assets\podium\podium.dds'
[ERROR] (src/corange.c:corange_signal:9) Segmentation fault

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.