• Announcements

    • khawk

      Download the Game Design and Indie Game Marketing Freebook   07/19/17

      GameDev.net and CRC Press have teamed up to bring a free ebook of content curated from top titles published by CRC Press. The freebook, Practices of Game Design & Indie Game Marketing, includes chapters from The Art of Game Design: A Book of Lenses, A Practical Guide to Indie Game Marketing, and An Architectural Approach to Level Design. The GameDev.net FreeBook is relevant to game designers, developers, and those interested in learning more about the challenges in game development. We know game development can be a tough discipline and business, so we picked several chapters from CRC Press titles that we thought would be of interest to you, the GameDev.net audience, in your journey to design, develop, and market your next game. The free ebook is available through CRC Press by clicking here. The Curated Books The Art of Game Design: A Book of Lenses, Second Edition, by Jesse Schell Presents 100+ sets of questions, or different lenses, for viewing a game’s design, encompassing diverse fields such as psychology, architecture, music, film, software engineering, theme park design, mathematics, anthropology, and more. Written by one of the world's top game designers, this book describes the deepest and most fundamental principles of game design, demonstrating how tactics used in board, card, and athletic games also work in video games. It provides practical instruction on creating world-class games that will be played again and again. View it here. A Practical Guide to Indie Game Marketing, by Joel Dreskin Marketing is an essential but too frequently overlooked or minimized component of the release plan for indie games. A Practical Guide to Indie Game Marketing provides you with the tools needed to build visibility and sell your indie games. With special focus on those developers with small budgets and limited staff and resources, this book is packed with tangible recommendations and techniques that you can put to use immediately. As a seasoned professional of the indie game arena, author Joel Dreskin gives you insight into practical, real-world experiences of marketing numerous successful games and also provides stories of the failures. View it here. An Architectural Approach to Level Design This is one of the first books to integrate architectural and spatial design theory with the field of level design. The book presents architectural techniques and theories for level designers to use in their own work. It connects architecture and level design in different ways that address the practical elements of how designers construct space and the experiential elements of how and why humans interact with this space. Throughout the text, readers learn skills for spatial layout, evoking emotion through gamespaces, and creating better levels through architectural theory. View it here. Learn more and download the ebook by clicking here. Did you know? GameDev.net and CRC Press also recently teamed up to bring GDNet+ Members up to a 20% discount on all CRC Press books. Learn more about this and other benefits here.
Sign in to follow this  
Followers 0
danromeo

Vertex Shader unexpected results, bizarre

9 posts in this topic

Hi.

 

I have a version 3.0 vertex shader for (what I call) Static Imposters that essentially decides which image in a texture atlas should be used and sends that info to the pixel shader.  

 

I am confident that the shader is written correctly but it always displays the wrong image!  If I run the shader through a debugger, the numbers are all correct, but the wrong image displays.  I have isolated this to a single variable, whose value is assigned from the program with Effect.Parameters["ImagesPerView"].SetValue(ImagesPerView);  

 

Running the shader through the Pix debugger, the value of ImagesPerView is always set correctly to 12, but the program displays the image as if the value of ImagesPerView is set to 11.  If I hardcode the value of ImagesPerView in the vertex shader to 12, overriding the program assignment, the program displays the correct image!  WHY am I getting different results even though the value of ImagesPerView is always 12?  

 

The program is assigning the value of 12 to ImagesPerView on every draw call.  I don't think this is due to any sort of  implicit conversions as I have checked the code thoroughly, and even did an (int)ImagesPerView conversion on every operation to make sure.  All of the other variable assignments in the shader appear to be correct and functioning correctly.  Stared at it until I was crosseyed.....What The Heck am I doing wrong?  

Any ideas welcome.

 

THANKS

0

Share this post


Link to post
Share on other sites
Maybe this could be because of wrong indexing?

For instance, there is an array of size 4.

int array[4]

And you are trying to access last element using array[4] instead of array[3].
1

Share this post


Link to post
Share on other sites

As Hodgman mentions, you'll have to post some code.

 


..the value of ImagesPerView is always set correctly to 12, ... If I hardcode the value of ImagesPerView in the vertex shader to 12, overriding the program assignment, the program displays the correct image!

 

That is likely the best indication of the area where the error is taking place.

 

When you post the code, indicate exactly where in the shader code you override the shader value to "12." Also, post some code around the place in your program where you send the variable to the shader. If you use Effect.Parameters["ImagesPerView"].SetValue(12) [ I don't mean ..SetValue(ImagesPerView) ] and it doesn't work, but you hardcode ImagesPerView = 12 in the shader, there's (obviously) a problem there.

 

You might also try adding another variable to your shader which you hardcode to 12, and use that value for the calc. Don't change anything else in either the shader or your program.

2

Share this post


Link to post
Share on other sites

Indexing, definitely a good idea but I've already checked this.  

 

Also if I throw a hard value from the program (Effect.Parameters["ImagesPerView"].SetValue(12)) it still seems to munge the value, but if I hard set a variable value in the shader (ImagesPerView=12) everything displays correctly.  What's the difference??

 

I'm not an expert but I know shaders make some assumptions about variables.  For example in different parts of the program I'm sending different values to ImagesPerView....but I still don't understand how the debugger can display all of the correct values and yet the program seems to be doing something entirely different.  

 

Rebuilt the entire project....still same results.  

 

Before I post code I'm going to remove all of the instances of throwing different values to ImagesPerView and then strip the shader code down to it's bare minimum.  This looks like some sort of munging to me.....for example hard coding the variable value in the shader results in a lot of code being skipped, so the problem could be in any line of the skipped code.  There is a small bit of branching in the shader that I'm suspicious of, although I've used branching in shaders lots of times without any problems.  it stands to reason that if all the vertex shader did was accept a value from the program and send it to the pixel shader that it would send the correct value!  

 

If any of this inspires any ideas please speak up!  THANKS for your suggestions.  

0

Share this post


Link to post
Share on other sites

I thought for sure that unbird must be right with rounding errors and/or int behavior, but I think I've covered this and I'm still getting incorrect results.  

 

Declaring all globals as floats in the shader.  Rounding values up to the nearest integer and truncating.  Still the same results and still seems to come down to this one single global.  Again, the number I'm sending to the pixel shader displays in PIX as 0.00 but the program behaves as if it is a different value.  

 

More Facts: If I hard set the global value in the .fx file and never throw a value from the program at all I still get the same incorrect results.   BUT if I declare a variable in the vertex shader and assign the same value everything displays correctly.  This must be a significant fact....not sure what to do with it though.  What's the difference between a global and a variable in an .fx file?  How are they treated differently?  

 

I tried changing the declaration order in the .fx file, still same results.  I keep thinking it must be a syntax error somewhere in the .fx file but I can't find any problems and obviously it compiles.  

0

Share this post


Link to post
Share on other sites

You still haven't posted any code. You're asking for help with your code, but, for some reason, you don't want anyone to see it?

 


More Facts: ...

 

Forget the descriptions. If you want more than guesses, post the code for what you're describing.

0

Share this post


Link to post
Share on other sites

This topic is old because I've been involved with other things.  I've seen conflicting info re: use of int's, seems I saw a MS recommendation to use int's to avoid rounding errors.  Regardless, I get better results when replacing ints with floats.   Thanks!

0

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0