What are some good books on cryptography for software?
(Decrypting and encrypting)
[QUOTE=AnonTakesOver;46524806]What are some good books on cryptography for software?
(Decrypting and encrypting)[/QUOTE]
Unless you have a very good reason for doing cryptography yourself (ie. educational purposes like self education, reinventing the wheel for fun, comp.sci.) i'd recommend VERY highly to NOT attempt cryptography yourself, as you're more likely to implement a broken and useless system than one that succeeds already present standards.
With this said, it is obviously up to you to do what you should do. And if that is to do cryptography yourself, then go right ahead. Just keep the above in mind.
[QUOTE=mastersrp;46525059]Unless you have a very good reason for doing cryptography yourself (ie. educational purposes like self education, reinventing the wheel for fun, comp.sci.) i'd recommend VERY highly to NOT attempt cryptography yourself, as you're more likely to implement a broken and useless system than one that succeeds already present standards.
With this said, it is obviously up to you to do what you should do. And if that is to do cryptography yourself, then go right ahead. Just keep the above in mind.[/QUOTE]
I'm curious in IT, and I like to learn a bit of everything. I want to be a jack of all trades for IT (I don't mean master at everything, that's impossible, but atleast know a fair bit in each section), so I want to learn cryptography, not for use in practical, educational.
Thanks for the advice.
im taking programming classes and have to make a program which converts celsius to fahrenheit or vice versa based on inputs. now, that works all well and dandy but, i also have to make the program exit based on input too, how would i do that?
[code]
#include <iostream>
float fahrenheit(float celsius)
{
return celsius * 9 / 5 + 32;
}
float celsius(float fahrenheit)
{
return (fahrenheit - 32) * 5 / 9;
}
int main(int argc, char* argv[])
{
int degree = 0;
std::cout << "What do you want to convert? " << std::endl;
std::cout << "1. Celsius to Fahrenheit " << std::endl;
std::cout << "2. Fahrenheit to Celsius " << std::endl
std::cin >> degree;
if (degree == 1){
float celsius = 0;
std::cout << "Enter degrees in Celsius to convert into Fahrenheit " << std::endl;
std::cin >> celsius;
std::cout << fahrenheit(celsius) << std::endl;
std::cin.ignore(1024);
}
if (degree == 2){
float fahrenheit = 0;
std::cout << "Enter degrees in Fahrenheit to convert into Celsius" << std::endl;
std::cin >> fahrenheit;
std::cout << celsius(fahrenheit) << std::endl;
std::cin.ignore(1024);
}
}
[/code]
[code] std::cout << "What do you want to convert? " << std::endl;
std::cout << "1. Celsius to Fahrenheit " << std::endl;
std::cout << "2. Fahrenheit to Celsius " << std::endl;
std::cout << "3. Exit program " << std::endl;
...
if (degree == 3) {
std::cout << "Bye!" << std::endl;
return 0;
}[/code]
You could also do a while loop so that after it converts the temp, it asks if you want to do another.
[QUOTE=NixNax123;46523571]What do you suggest a good starting value for physIterations be? A general ballpark value, just so I know what to test.
[editline]18th November 2014[/editline]
I'm trying 5, and that still don't fix my issue. What could be causing this? I'm SO CLOSE.
[editline]18th November 2014[/editline]
I updated my repo with the physics stuff, so you can see the context: [url]https://github.com/Tetramputechture/Corraticca[/url]
[editline]18th November 2014[/editline]
And here's the .zip, so you can see exactly what my problem is:
[url]http://www.filedropper.com/corattica[/url][/QUOTE]
Have you tried only resolving the collision if the objects are moving towards each other? That's what most physics engines do, iirc.
[QUOTE=Tommyx50;46528031]Have you tried only resolving the collision if the objects are moving towards each other? That's what most physics engines do, iirc.[/QUOTE]
That might be it! How would I implement that? Once I do that, I have one more thing to figure out (making sure asteroids don't spawn inside each other) and I think I'll have it ready to go. (:
Edit:
I used my brain and figured it out!!!!!!! [B]YES!!!!!!!!!!!! FUCK YES.[/B] I DID IT! THANK YOU SO GODDAMN MUCH.
[QUOTE=AnonTakesOver;46525218]I'm curious in IT, and I like to learn a bit of everything. I want to be a jack of all trades for IT (I don't mean master at everything, that's impossible, but atleast know a fair bit in each section), so I want to learn cryptography, not for use in practical, educational.
Thanks for the advice.[/QUOTE]
For educational and practical purposes, [URL="http://books.google.co.uk/books/about/Cryptography_Engineering.html?id=GNbfjwEACAAJ&redir_esc=y"]Cryptography Engineering[/URL] is about as good as it gets.
So, currently, I'm using this to spawn a sprite a random position at an edge of the screen:
[code] public void setRandomPos() {
Vector2f upperBound = Vector2f.add(Camera.getView().getCenter(), Camera.getView().getSize());
Vector2f lowerBound = Vector2f.sub(Camera.getView().getCenter(), Camera.getView().getSize());
int tx = CMath.randInt((int)lowerBound.x, (int)upperBound.x);
int ty = CMath.randInt((int)lowerBound.y, (int)upperBound.y);
if (rand.nextDouble() < 0.5) {
tx = (int)lowerBound.x;
} else {
ty = (int)lowerBound.y;
}
pos = new Vector2f(tx, ty);
asteroidSprite.setPosition(pos);
if (intersectsWithAsteroid()) {
setRandomPos();
}
}[/code]
However, this solution sometimes lags the game out. I'm recursing because I don't want one asteroid to spawn inside another. Is there a better solution?
[QUOTE=NixNax123;46530144]So, currently, I'm using this to spawn a sprite a random position at an edge of the screen:
[code] public void setRandomPos() {
Vector2f upperBound = Vector2f.add(Camera.getView().getCenter(), Camera.getView().getSize());
Vector2f lowerBound = Vector2f.sub(Camera.getView().getCenter(), Camera.getView().getSize());
int tx = CMath.randInt((int)lowerBound.x, (int)upperBound.x);
int ty = CMath.randInt((int)lowerBound.y, (int)upperBound.y);
if (rand.nextDouble() < 0.5) {
tx = (int)lowerBound.x;
} else {
ty = (int)lowerBound.y;
}
pos = new Vector2f(tx, ty);
asteroidSprite.setPosition(pos);
if (intersectsWithAsteroid()) {
setRandomPos();
}
}[/code]
However, this solution sometimes lags the game out. I'm recursing because I don't want one asteroid to spawn inside another. Is there a better solution?[/QUOTE]
So essentially each time you're choosing a place to spawn you're checking to see if it interacts with every asteroid on the game level? Probably the best thing to do is make sure its only checking asteroids close to the position
[QUOTE=NixNax123;46528186]That might be it! How would I implement that? Once I do that, I have one more thing to figure out (making sure asteroids don't spawn inside each other) and I think I'll have it ready to go. (:
Edit:
I used my brain and figured it out!!!!!!! [B]YES!!!!!!!!!!!! FUCK YES.[/B] I DID IT! THANK YOU SO GODDAMN MUCH.[/QUOTE]
That's great! Congratulations :)
[editline]20th November 2014[/editline]
[QUOTE=NixNax123;46530144]So, currently, I'm using this to spawn a sprite a random position at an edge of the screen:
[code] public void setRandomPos() {
Vector2f upperBound = Vector2f.add(Camera.getView().getCenter(), Camera.getView().getSize());
Vector2f lowerBound = Vector2f.sub(Camera.getView().getCenter(), Camera.getView().getSize());
int tx = CMath.randInt((int)lowerBound.x, (int)upperBound.x);
int ty = CMath.randInt((int)lowerBound.y, (int)upperBound.y);
if (rand.nextDouble() < 0.5) {
tx = (int)lowerBound.x;
} else {
ty = (int)lowerBound.y;
}
pos = new Vector2f(tx, ty);
asteroidSprite.setPosition(pos);
if (intersectsWithAsteroid()) {
setRandomPos();
}
}[/code]
However, this solution sometimes lags the game out. I'm recursing because I don't want one asteroid to spawn inside another. Is there a better solution?[/QUOTE]
killerteacup's solution above, while it would speed it up, would require some work implementing spatial partitioning and wouldn't handle cases where it's impossible to spawn any asteroids.
The first thing you should do, is stop this from being recursive. Recursion can quickly fill up the stack, and recursion is only really good for navigating trees - what you are doing here would fit iteration (using loops) far better!
So change to code to:
[CODE]
public void setRandomPos() {
Vector2f upperBound = Vector2f.add(Camera.getView().getCenter(), Camera.getView().getSize());
Vector2f lowerBound = Vector2f.sub(Camera.getView().getCenter(), Camera.getView().getSize());
do { // Use a do while, since we want this to happen at least once
int tx = CMath.randInt((int)lowerBound.x, (int)upperBound.x);
int ty = CMath.randInt((int)lowerBound.y, (int)upperBound.y);
if (rand.nextDouble() < 0.5) {
tx = (int)lowerBound.x;
} else {
ty = (int)lowerBound.y;
}
pos = new Vector2f(tx, ty);
asteroidSprite.setPosition(pos);
} while (intersectsWithAsteroid()); // Using loops insures stack usage is near constant, unlike recursion
}
[/CODE]
The other thing you can do, is set an upper limit. If you try to spawn an asteroid 4 or 5 times and you still fail, it's likely that the screen edge is mostly filled up, so you should stop trying to spawn the asteroids and wait until the next frame.
What is Distributed Object Architecture ?
And what is Service-Oriented Architecture ?
Can someone give me a brief example, not links to huge texts but rather just a quick example of what each means?
Concerning style, which is easier to read? Rate agree for first and disagree for second.
Also, I am using C, and yes, I am also using goto for one of its few valid uses: error handling!
[code]
static guint parse_widget
(GScanner *scanner)
{
guint exp;
gchar *name;
widget_t *widget = new_widget (NULL);
if ((exp = g_scanner_get_next_token (scanner)) != G_TOKEN_STRING) goto parse_widget_error;
name = g_strdup (scanner->value.v_string);
if ((exp = g_scanner_get_next_token (scanner)) != G_TOKEN_EQUAL_SIGN) goto parse_widget_error;
if ((exp = g_scanner_get_next_token (scanner)) != G_TOKEN_STRING) goto parse_widget_error;
widget->parent = g_strdup (scanner->value.v_string);
if ((exp = g_scanner_get_next_token (scanner)) != G_TOKEN_LEFT_CURLY) goto parse_widget_error;
while ((exp = g_scanner_get_next_token (scanner)) != G_TOKEN_RIGHT_CURLY)
{
if (exp == THEME_PROPERTY) exp = parse_property (scanner, widget->properties);
else if (exp == THEME_CHILD) exp = parse_child (scanner, name);
else if (exp == G_TOKEN_RIGHT_CURLY) exp = G_TOKEN_NONE;
if (exp != G_TOKEN_NONE) goto parse_widget_error;
}
g_hash_table_insert (widgets, name, widget);
return G_TOKEN_NONE;
parse_widget_error:
free_widget (widget);
g_free (name);
return exp;
}
[/code]
[code]
static guint parse_widget
(GScanner *scanner)
{
guint exp;
gchar *name;
widget_t *widget = new_widget (NULL);
if ((exp = g_scanner_get_next_token (scanner)) != G_TOKEN_STRING)
goto parse_widget_error;
name = g_strdup (scanner->value.v_string);
if ((exp = g_scanner_get_next_token (scanner)) != G_TOKEN_EQUAL_SIGN)
goto parse_widget_error;
if ((exp = g_scanner_get_next_token (scanner)) != G_TOKEN_STRING)
goto parse_widget_error;
widget->parent = g_strdup (scanner->value.v_string);
if ((exp = g_scanner_get_next_token (scanner)) != G_TOKEN_LEFT_CURLY)
goto parse_widget_error;
while ((exp = g_scanner_get_next_token (scanner)) != G_TOKEN_RIGHT_CURLY)
{
if (exp == THEME_PROPERTY)
exp = parse_property (scanner, widget->properties);
else if (exp == THEME_CHILD)
exp = parse_child (scanner, name);
else if (exp == G_TOKEN_RIGHT_CURLY)
exp = G_TOKEN_NONE;
if (exp != G_TOKEN_NONE)
goto parse_widget_error;
}
g_hash_table_insert (widgets, name, widget);
return G_TOKEN_NONE;
parse_widget_error:
free_widget (widget);
g_free (name);
return exp;
}
[/code]
Usually I would use the next line but in this case it's a mess no matter how you do it, in my opinion you should keep everything as segregated as possible.
[code]
static guint parse_widget
(GScanner *scanner)
{
guint exp;
gchar *name;
widget_t *widget = new_widget (NULL)
if ((exp = g_scanner_get_next_token (scanner)) != G_TOKEN_STRING) goto parse_widget_error;
name = g_strdup (scanner->value.v_string);
if ((exp = g_scanner_get_next_token (scanner)) != G_TOKEN_EQUAL_SIGN) goto parse_widget_error;
if ((exp = g_scanner_get_next_token (scanner)) != G_TOKEN_STRING) goto parse_widget_error;
widget->parent = g_strdup (scanner->value.v_string);
if ((exp = g_scanner_get_next_token (scanner)) != G_TOKEN_LEFT_CURLY) goto parse_widget_error;
while ((exp = g_scanner_get_next_token (scanner)) != G_TOKEN_RIGHT_CURLY)
{
if (exp == THEME_PROPERTY exp = parse_property (scanner, widget->properties);
else if (exp == THEME_CHILD) exp = parse_child (scanner, name);
else if (exp == G_TOKEN_RIGHT_CURLY) exp = G_TOKEN_NONE;
if (exp != G_TOKEN_NONE) goto parse_widget_error;
}
g_hash_table_insert (widgets, name, widget);
return G_TOKEN_NONE;
parse_widget_error:
free_widget (widget);
g_free (name);
return exp;
}
[/code]
[QUOTE=reevezy67;46538430]Usually I would use the next line but in this case it's a mess no matter how you do it, in my opinion you should keep everything as segregated as possible.[/QUOTE]
It really is a mess no matter how you do it and for a perfectionist like me, that's just unacceptable. Thanks anyways!
Also I agree with you on segregating the two blocks within the while statement, but not the segregation after the if statement. Other than that, looks good.
So I'm using quadtrees for my game map:
[code] public static void addEntity(Entity e) {
quadTree.insert(e.getPos());
entities.add(e);
System.out.format("Entity count: %s%n%n", entities.size());
}[/code]
However, this only inserts the entitiy's point when it is spawned. How would I update that point in the quadtree whenever the entity is updated?
[editline]20th November 2014[/editline]
I would guess just to delete the old point, and add the new point after updating, but that seems like it would be a lot of work. Is there any other method?
[editline]20th November 2014[/editline]
I would guess just to delete the old point, and add the new point after updating, but that seems like it would be a lot of work. Is there any other method?
[QUOTE=NixNax123;46538805]So I'm using quadtrees for my game map:
[code] public static void addEntity(Entity e) {
quadTree.insert(e.getPos());
entities.add(e);
System.out.format("Entity count: %s%n%n", entities.size());
}[/code]
However, this only inserts the entitiy's point when it is spawned. How would I update that point in the quadtree whenever the entity is updated?
[editline]20th November 2014[/editline]
I would guess just to delete the old point, and add the new point after updating, but that seems like it would be a lot of work. Is there any other method?
[editline]20th November 2014[/editline]
I would guess just to delete the old point, and add the new point after updating, but that seems like it would be a lot of work. Is there any other method?[/QUOTE]
Read my post on WAYWO to see my opinion of quadtrees, but other than that - you are going to need some sort of id system if you aren't planning on re-building the entire tree every frame.
[QUOTE=Tommyx50;46541002]Read my post on WAYWO to see my opinion of quadtrees, but other than that - you are going to need some sort of id system if you aren't planning on re-building the entire tree every frame.[/QUOTE]
Alright, I read your post, and you had a good point - so would I just make a grid system with the same characteristics except keep the boundaries constant, and never subdivide? And how would I update the entities then?
[QUOTE=NixNax123;46541040]Alright, I read your post, and you had a good point - so would I just make a grid system with the same characteristics except keep the boundaries constant, and never subdivide? And how would I update the entities then?[/QUOTE]
Updating the entities then would just be re-creating the grid every frame - it's a lot more efficient than re-creating a quadtree because figuring out where to enter a point into the grid is as simple as a little division.
Have you actually run into performance issues with collision detection yet? Also, did you ever figure out the spawning asteroid lag?
[QUOTE=elevate;46538212]Concerning style, which is easier to read? Rate agree for first and disagree for second.
Also, I am using C, and yes, I am also using goto for one of its few valid uses: error handling!
[code]
static guint parse_widget
(GScanner *scanner)
{
guint exp;
gchar *name;
widget_t *widget = new_widget (NULL);
if ((exp = g_scanner_get_next_token (scanner)) != G_TOKEN_STRING)
goto parse_widget_error;
name = g_strdup (scanner->value.v_string);
if ((exp = g_scanner_get_next_token (scanner)) != G_TOKEN_EQUAL_SIGN)
goto parse_widget_error;
if ((exp = g_scanner_get_next_token (scanner)) != G_TOKEN_STRING)
goto parse_widget_error;
widget->parent = g_strdup (scanner->value.v_string);
if ((exp = g_scanner_get_next_token (scanner)) != G_TOKEN_LEFT_CURLY)
goto parse_widget_error;
while ((exp = g_scanner_get_next_token (scanner)) != G_TOKEN_RIGHT_CURLY)
{
if (exp == THEME_PROPERTY)
exp = parse_property (scanner, widget->properties);
else if (exp == THEME_CHILD)
exp = parse_child (scanner, name);
else if (exp == G_TOKEN_RIGHT_CURLY)
exp = G_TOKEN_NONE;
if (exp != G_TOKEN_NONE)
goto parse_widget_error;
}
g_hash_table_insert (widgets, name, widget);
return G_TOKEN_NONE;
parse_widget_error:
free_widget (widget);
g_free (name);
return exp;
}
[/code][/QUOTE]
I prefer the second. It makes reading code quickly easier if you don't need to move your eyes horizontally that much.
[QUOTE=Tommyx50;46541053]Updating the entities then would just be re-creating the grid every frame - it's a lot more efficient than re-creating a quadtree because figuring out where to enter a point into the grid is as simple as a little division.
Have you actually run into performance issues with collision detection yet? Also, did you ever figure out the spawning asteroid lag?[/QUOTE]
Alright! No, but I'll try profiling it to see where it lags.
[editline]21st November 2014[/editline]
[QUOTE=Tommyx50;46541053]Updating the entities then would just be re-creating the grid every frame - it's a lot more efficient than re-creating a quadtree because figuring out where to enter a point into the grid is as simple as a little division.
Have you actually run into performance issues with collision detection yet? Also, did you ever figure out the spawning asteroid lag?[/QUOTE]
Sorry if this is a dumb question, but how would I implement a constant grid in my game?
So I made a git repo for my project, and I added everything and pushed it.
It starts uploading etc and takes a while cause it's a large enough project and then it finds a file that is too big to push.
I can't see anything in the repo on the site but it doesn't say it didn't do it?
I already created a .gitignore after the first fail but it keeps failing.
How do I make it work right
[QUOTE=NixNax123;46542230]Alright! No, but I'll try profiling it to see where it lags.
[editline]21st November 2014[/editline]
Sorry if this is a dumb question, but how would I implement a constant grid in my game?[/QUOTE]
Make a 3d array (where the first 2 dimensions are x and y, and the third being a list of points) and then figure out in what part of the array a point should be in simply by doing:
[code]
arrayX = Math.floor(point.x / gridCellSize);
arrayY = Math.floor(point.y / gridCellSize);
grid[arrayX][arrayY].add(pointID)
[/code]
The third dimension should probably be a linked list, due to the dynamically sized nature of it, while the first 2 dimensions can be a static array due to the fixed size of your game world.
[QUOTE=Over-Run;46543343]So I made a git repo for my project, and I added everything and pushed it.
It starts uploading etc and takes a while cause it's a large enough project and then it finds a file that is too big to push.
I can't see anything in the repo on the site but it doesn't say it didn't do it?
I already created a .gitignore after the first fail but it keeps failing.
How do I make it work right[/QUOTE]
Since you're just starting out and haven't (successfully) pushed yet, the simplest solution is to just delete your .git folder and start over.
If not, then you'll need to mess with history a bit.
If you only have one commit or you added the big file in the last commit you did, then "git reset HEAD~1" will undo that commit. From there you just re-add all your files (except the big one, obviously), commit, push, and you're done.
If you have multiple commits and you didn't add the big file in the last one, it gets more complicated. I'll only go there if necessary though.
Funny enough, I bring more git problems.
I have a bitbucket git, a local copy which I use to push changes, and a mirror bare server that will fetch all changes in the future.
I use SourceTree for commodity.
I don't remember what happened one day, but all the commits that I did from then on to that git have been updating only my 'master' tag, and not the origin/master one,[B] [URL="http://i.imgur.com/24VDXlN.png"]even though bitbucket shows perfectly the new commits.[/URL][/B]
It could just be sourcetree bugging out and end of story, but when I go to the remote server and git fetch and git checkout (without specifying commit) master, it tries to revert everything 3 commits back. Which isn't the same as the wrongly marked origin/master commit from sourcetree, but more than likely means something is wrong.
It's kinda confusing and it probably doesn't help that I know the basics of git, so if you need any info, just say so.
Can't figure out what opengl state is causing this to happen.
[t]http://i.imgur.com/uAj6omS.png[/t]
The gray square is supposed to be blue. Seems to be a mask of some sort. I have tried disabling every opengl state that I can think of.
If anyone with opengl experience has any ideas that would be great. Here is the code I am trying.
[code]
glBindFramebuffer(GL_FRAMEBUFFER, 0);
int depth_func;
GLboolean depth_test = glIsEnabled(GL_DEPTH_TEST);
glGetIntegerv(GL_DEPTH_FUNC, &depth_func);
GLboolean lighting = glIsEnabled(GL_LIGHTING);
GLboolean blend_enabled = glIsEnabled(GL_BLEND);
GLboolean texture1d_enabled = glIsEnabled(GL_TEXTURE_1D);
GLboolean texture2d_enabled = glIsEnabled(GL_TEXTURE_2D);
glDisable(GL_CULL_FACE);
glColorMask(true, true, true, true);
glDisable(GL_DEPTH_TEST);
glDepthFunc(GL_ALWAYS);
glDisable(GL_LIGHTING);
glDisable(GL_BLEND);
glDisable(GL_TEXTURE_1D);
glDisable(GL_TEXTURE_2D);
int matrix_mode;
glGetIntegerv(GL_MATRIX_MODE, &matrix_mode);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(0, 427, 0, 234.32927, -1, 0);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glClearDepth(1);
glClear(GL_DEPTH_BUFFER_BIT);
glClearDepth(0);
glColor3d(0, 0, 1);
glRectd(0, 0, 200, 200);
// restore the states that have been modified
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
glMatrixMode(matrix_mode);
if (depth_test == GL_TRUE)
glEnable(GL_DEPTH_TEST);
else
glDisable(GL_DEPTH_TEST);
glDepthFunc(depth_func);
if (lighting == GL_TRUE)
glEnable(GL_LIGHTING);
else
glDisable(GL_LIGHTING);
if (blend_enabled == GL_TRUE)
glEnable(GL_BLEND);
else
glDisable(GL_BLEND);
if (texture1d_enabled == GL_TRUE)
glEnable(GL_TEXTURE_1D);
else
glDisable(GL_TEXTURE_2D);
if (texture2d_enabled == GL_TRUE)
glEnable(GL_TEXTURE_2D);
else
glDisable(GL_TEXTURE_2D);
return fpSwapBuffers(dc);[/code]
Have a look at how SFML uses glPushClientAttrib and glPushAttrib to store and restore the OpenGL state (in RenderTarget::pushGLStates / RenderTarget::popGLStates)
Besides that RenderTarget::resetGLStates defaults pretty much all states, that might be useful.
[url]https://github.com/LaurentGomila/SFML/blob/master/src/SFML/Graphics/RenderTarget.cpp[/url]
[editline]22nd November 2014[/editline]
Ohh yeah,
You probably just need to disable the shader,
glUseProgram(0)
[QUOTE=Cold;46548522]Have a look at how SFML uses glPushClientAttrib and glPushAttrib to store and restore the OpenGL state (in RenderTarget::pushGLStates / RenderTarget::popGLStates)
Besides that RenderTarget::resetGLStates defaults pretty much all states, that might be useful.
[url]https://github.com/LaurentGomila/SFML/blob/master/src/SFML/Graphics/RenderTarget.cpp[/url]
[editline]22nd November 2014[/editline]
Ohh yeah,
You probably just need to disable the shader,
glUseProgram(0)[/QUOTE]
Disabling the shader with "glUseProgram(0)" fixed it. Thank you! :D
[t]http://i.imgur.com/hNl2P8C.png[/t]
[QUOTE=high;46549038]Disabling the shader with "glUseProgram(0)" fixed it. Thank you! :D
[t]http://i.imgur.com/hNl2P8C.png[/t][/QUOTE]
A little late now but incase you get stuck with something like this again, I recommend checking getting an opengl debugger that lets you capture a frame and inspect states. If you're using an AMD chip I recommend GpuPerfStudio, but nvidia offer equivalent software too.
Sorry, you need to Log In to post a reply to this thread.