Jump to content
Eternal Lands Official Forums
Beaverhunter

Current CVS errors

Recommended Posts

Just turn off the shadows and it will work.

I don't really understand why it's doing that. All what I know is that the font system is using a system to record the texture used in order to avoid the changes of textures too frequently. And if you use glPushAttrib(GL_TEXTURE_BIT) and glPopAttrib() while using this system, it breaks the fonts display like we can see on your shots. I'll try to have a look to see if a glPushAttrib is done somewhere else and causes this problem but what I don't understand is that it's working well when you don't display the bones numbers... :icon13:

 

At the same time, I've noticed that the display of the actors tags is broken again and it's maybe linked to the error larrystorch has reported about cal_get_maxz.

tagsbugol3.th.jpg

Share this post


Link to post
Share on other sites
Just did a cvs up and here is the error at the very end when it's trying to creating el.x86.linux.bin:

 

actor_init.o(.text+0xff0): In function `cal_get_maxz':
/usr/local/games/elc/actor_init.cpp:591: multiple definition of `cal_get_maxz'
new_actors.o(.text+0x310):/usr/local/games/elc/new_actors.c:202: first defined here
/usr/lib/gcc/i486-slackware-linux/3.4.6/../../../../i486-slackware-linux/bin/ld: Warning: size of symbol `cal_get_maxz' changed from 53 in new_actors.o to 69 in actor_init.o
collect2: ld returned 1 exit status
make: *** [el.x86.linux.bin] Error 1

I'm getting a very similar error (and cannot compile the cvs) under kubuntu 7.10.

 

Edit: This problem seems to be caused by SKY_FPV_CURSOR being enabled in make.conf. The cvs compiles fine with SKY_FPV_CURSOR disabled.

Edited by asgnny

Share this post


Link to post
Share on other sites

Edit: This problem seems to be caused by SKY_FPV_CURSOR being enabled in make.conf. The cvs compiles fine with SKY_FPV_CURSOR disabled.

 

Damn! And that's been working great for a long time now. I was hoping it would soon be ready for release.

Share this post


Link to post
Share on other sites

The ground tiles dissapear (black) when zooming in or rotating the camera. Happens on WinXP, Nvidia card.

 

I get this too sometimes.. WinXP and Nvidia card as well

Edited by Acelon

Share this post


Link to post
Share on other sites

Ok, it seems that it is because of a new, undocumented feature that Xaphier added recently to support backface culling for actors.

Share this post


Link to post
Share on other sites

Dont know, maybe i'm missing something but with fresh CVS build wraith and phantoms are completely invisible for me, i see only heading. Compile is with default options.

 

elscreen002.jpg

Share this post


Link to post
Share on other sites

Dont know, maybe i'm missing something but with fresh CVS build wraith and phantoms are completely invisible for me, i see only heading.

 

This is a known issue with the actor shaders. Renaming the *.vert files in the shaders folder will disable the shaders and the Wraith should appear again.

 

Edit:

Using el -uap=0 main does not work because this is always interpreted as username ap=0.

 

Using el --use_animation_program=0 main however disables the vertex shaders properly.

 

I also tried disabling the shaders in el.ini but #use_animation_program=0 is not preserved when rewriting el.ini after #save. This is because OPT_BOOL_INI_RO causes a noop in elconfig.c:write_var(). IMHO it should be handled just as OPT_BOOL_INI is in that function.

Edited by ago

Share this post


Link to post
Share on other sites

This is a known problem. One way to fix it is copy the anim.vert over anim_ghost.vert

 

BTW, pleas euse the vertex shaders if possible, since we need to find out all the problems related to them.

Share this post


Link to post
Share on other sites

actors.c uses the inline keyword which breaks with Visual C++. There is an __inline__ define which takes care of different compilers.

 

The functions in question are

 

actors.c:573 static __inline__ void draw_actor_banner_new(actor * actor_id)

actors.c:633 static __inline__ void draw_actor_without_banner(actor * actor_id)

Share this post


Link to post
Share on other sites
Why do you add std:: before the min() and max() functions. That doesn't compile on visual. min and max are part of math, not std

I don't mean to sound rude but even a cursory search on google e.t.c. will show you that your compiler is wrong. std::max() has been part of the C++ standard for years and years. There are several ways you can sort this out but it probably depends on your compiler version so have a look.

Share this post


Link to post
Share on other sites
Why do you add std:: before the min() and max() functions. That doesn't compile on visual. min and max are part of math, not std

I don't mean to sound rude but even a cursory search on google e.t.c. will show you that your compiler is wrong. std::max() has been part of the C++ standard for years and years. There are several ways you can sort this out but it probably depends on your compiler version so have a look.

VC++ has been known for not following standards for years, but revent versions have gotten much closer.

Share this post


Link to post
Share on other sites
Why do you add std:: before the min() and max() functions. That doesn't compile on visual. min and max are part of math, not std

 

This is a collision between then min/max define from windows.h and std::min/max. The preprecessor will expand std::min(a,:omg: to something like

std::(a < b ? a : b)

which is clearly wrong.

 

I'm using an #undef min/max in the files in question to prevent the breakage. Maybe platform.h should have inside the #ifdef WINDOWS block

#define  NOMINMAX

 

This prevents defining the macros.

 

Index: platform.h
===================================================================
RCS file: /cvsroot/elc/elc/platform.h,v
retrieving revision 1.14
diff -u -r1.14 platform.h
--- platform.h	1 Feb 2008 12:43:58 -0000	1.14
+++ platform.h	2 Feb 2008 15:11:53 -0000
@@ -24,6 +24,7 @@
#endif  // _WIN32 || _WIN64

#ifdef WINDOWS
+ #define NOMINMAX
 #include <windows.h>
 #ifdef _MSC_VER		// now we do test for VC
  // Lachesis: Make sure snprintf is declared before we #define it to be something else,

Share this post


Link to post
Share on other sites
Index: platform.h
===================================================================
RCS file: /cvsroot/elc/elc/platform.h,v
retrieving revision 1.14
diff -u -r1.14 platform.h
--- platform.h	1 Feb 2008 12:43:58 -0000	1.14
+++ platform.h	2 Feb 2008 15:11:53 -0000
@@ -24,6 +24,7 @@
#endif  // _WIN32 || _WIN64

#ifdef WINDOWS
+ #define NOMINMAX
 #include <windows.h>
 #ifdef _MSC_VER		// now we do test for VC
  // Lachesis: Make sure snprintf is declared before we #define it to be something else,

If that works for everyone then I'll happily add it but it's no substitute for a proper compiler. :omg:

Share this post


Link to post
Share on other sites

This seems to fix the problem. Still .... the the VC++ compiler is on of the best ones, whether it follows standards or not :)

 

Other things that need fixing are:

 

v[index].tmp = 2.0 / sqrt(v[index].remaining_tris.size())

v.score = 2.0 / sqrt(v.remaining_tris.size());

 

They should have a typecast otherwise are ambigious

 

v[index].tmp = 2.0 / sqrt((float)v[index].remaining_tris.size())

v.score = 2.0 / sqrt((float)v.remaining_tris.size());

Share this post


Link to post
Share on other sites
Other things that need fixing are:

 

v[index].tmp = 2.0 / sqrt(v[index].remaining_tris.size())

v.score = 2.0 / sqrt(v.remaining_tris.size());

 

They should have a typecast otherwise are ambigious

 

v[index].tmp = 2.0 / sqrt((float)v[index].remaining_tris.size())

v.score = 2.0 / sqrt((float)v.remaining_tris.size());

 

This is not ambiguous: sqrt accepts double, so compiler converts integer to double and passes it to sqrt function.

What you suggest seems to be quite strange: you said convert it to float, but still it is not right type for sqrt

(or you should use sqrtf instead) so compiler still must convert it to double.

Share this post


Link to post
Share on other sites
Other things that need fixing are:

 

v[index].tmp = 2.0 / sqrt(v[index].remaining_tris.size())

v.score = 2.0 / sqrt(v.remaining_tris.size());

 

They should have a typecast otherwise are ambigious

 

v[index].tmp = 2.0 / sqrt((float)v[index].remaining_tris.size())

v.score = 2.0 / sqrt((float)v.remaining_tris.size());

 

This is not ambiguous: sqrt accepts double, so compiler converts integer to double and passes it to sqrt function.

What you suggest seems to be quite strange: you said convert it to float, but still it is not right type for sqrt

(or you should use sqrtf instead) so compiler still must convert it to double.

 

It is ambigious because i have 2 definitions of sqrt. One is with double as argument and the other is with float as argument. And considering v[index].tmp is float obviously it's better to use the float sqrt

Edited by kibora

Share this post


Link to post
Share on other sites

+ #define NOMINMAX

If that works for everyone then I'll happily add it but it's no substitute for a proper compiler. :)

 

argl. guess what, gcc spills out warnings.

In file included from eye_candy/types.h:8,
			 from eye_candy/eye_candy.h:120,
			 from eye_candy/effect_targetmagic.cpp:5:
eye_candy/../platform.h:27:1: warning: "NOMINMAX" redefined
In file included from d:/Dev-Cpp/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/mingw32/bits/c++config.h:35,
			 from d:/Dev-Cpp/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/string:45,
			 from eye_candy/eye_candy.h:111,
			 from eye_candy/effect_targetmagic.cpp:5:
d:/Dev-Cpp/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/mingw32/bits/os_defines.h:46:1: warning: this is the location of the previous definition

 

This however works:

 

Index: platform.h
===================================================================
RCS file: /cvsroot/elc/elc/platform.h,v
retrieving revision 1.15
diff -u -r1.15 platform.h
--- platform.h	2 Feb 2008 17:24:31 -0000	1.15
+++ platform.h	3 Feb 2008 02:11:55 -0000
@@ -24,7 +24,9 @@
#endif  // _WIN32 || _WIN64

#ifdef WINDOWS
- #define NOMINMAX
+ #ifndef NOMINMAX
+  #define NOMINMAX
+ #endif
 #include <windows.h>
 #ifdef _MSC_VER		// now we do test for VC
  // Lachesis: Make sure snprintf is declared before we #define it to be something else,

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

  • Recently Browsing   0 members

    No registered users viewing this page.

×