Java-Gaming.org Hi !
 Featured games (90) games approved by the League of Dukes Games in Showcase (769) Games in Android Showcase (230) games submitted by our members Games in WIP (855) games currently in development
 News: Read the Java Gaming Resources, or peek at the official Java tutorials
 Show Posts Pages: 1 2 [3] 4 5 ... 11
61  Game Development / Newbie & Debugging Questions / Re: [repost]getBounds() on: 2014-02-05 15:31:57
To add on to what everyone else has said, the bitwise OR operation allows you to create bit flags. Since each bit has it's own position, and a boolean value is simply a single bit, you can think of it as creating several booleans within a byte.

One byte can contain eight boolean values:
0000 0001 = 1
0000 0010 = 2
0000 0100 = 4
0000 1000 = 8
0001 0000 = 16
0010 0000 = 32
0100 0000 = 64
1000 0000 = 128

The bitwise OR operator has the following truth table:
0 | 0 = 0
0 | 1 = 1
1 | 1 = 1

This means that:..
0000 0000 | 0000 0000 = 0000 0000
0000 0001 | 0000 0000 = 0000 0001
0000 0100 | 0000 0010 = 0000 0110
0000 0110 | 0000 0100 = 0000 0110

So, to sum it all up, bit flags allow you to place several booleans within a single byte. You can read the binary value of the byte, with a 0 meaning false and a 1 meaning true.

Edit: It might be easier to read if you specify the values as binary. You can do this like so:

 1  2  3  4  5  6  7 `byte a = 0b00000000; // 0byte b = 0b00000001; // 1byte c = 0b00000010; // 2byte d = 0b00000100; // 4byte e = 0b00001000; // 8byte x = a | c | d; // 0110, 6`
 62 Game Development / Newbie & Debugging Questions / Floating point inaccuracies, perspective projection on: 2014-02-04 22:03:28 When I set the near pane to 2 and the far pane to 10, everything is displayed at (X, Y, 2).When I set the near pane to 1 and the far pane to 100, everything is displayed at (X, Y, 1).When I set the near pane to 1 and the far pane to 10, nothing at (X, Y, 1) is displayed.I believe this is to do with floating point inaccuracies with my matrix multiplication. Is there anything I can do to solve this issue?
 63 Discussions / Miscellaneous Topics / Re: Hello JGO & Class/Interface Inheritance Discussion on: 2014-02-04 16:28:31 I don't think the discussion should be about one type of inheritance over the other, but instead about when to use one type of inheritance over the other. Favouring a certain type of inheritance gives you restrictions; you should always keep an open mind.Interfaces allow you to abstract out a set of behaviours, i.e they allow you to share the same type of behaviour among several classes which implement those behaviours in a certain way. Classes on the other hand allow you to inherit a fixed set of states and behaviours. Abstract classes allow you to share a fixed set of states and behaviours but also allow you to abstract out a set of behaviours.If there's benefits of a certain type of inheritance then you should consider using that type. That said, you shouldn't abuse inheritance. If there's little or no benefit of polymorphism, then you should be considering composition over inheritance.To answer your original question though, I find myself using abstract classes most often as they allow the greatest flexibility.
 64 Game Development / Newbie & Debugging Questions / Re: Perspective projection matrix incorrect on: 2014-02-04 13:01:06 --> -->  -->  -->  -->  -->  -->  That's the last 60 seconds of my life. ^^The problem: -(-zFar + zNear) / (zFar - zNear).The solution: -(zFar + zNear) / (zFar - zNear).FFS@@~#'#;'#;'@~:@{:[';[p';[p#@:@:@:@:{l:[] #;{@~:~{@:?:@:@:@:';[p];[;]-p]=;[]=+{}= ='[];[#';];'[#;Ten hours of debugging just for that...Edit: It requires me to translate the camera 1 on the Z axis. Should I add 1 to -(2f * zFar * zNear) / (zFar - zNear)?
65  Game Development / Newbie & Debugging Questions / Re: Perspective projection matrix incorrect on: 2014-02-04 12:21:59
Because we don't see the code around this one, perhaps try disabling other stuffs like lighting, texture...

I've not got anything else enabled. The code:

The viewport is being set as the width and the height of the screen.
This is the render method (it uses my LWJGL wrapper/library). This is the same for orthographic projection (except for clearing depth buffer):
 1  2  3  4  5  6  7  8 `GL.glClearColor(colour);GL.glClear(Buffer.COLOR_DEPTH); // combined colour and depth bufferprogram.attach(); // simply calls glUseProgramprogram.setUniformMatrix4x4("mvp", camera.update()); // calls setUniformMatrix4, the matrix isn't transposedvao.attach();vao.render(Primitive.TRIANGLE_STRIP, 4); // calls glDrawArraysVertexArrayObject.detach();ProgramObject.detach();`

I'm updating my view*Projection uniform variable with this method (you can see the values of the matrices (column major) in my OP), this is the same for orthographic projection:
 1  2  3  4 `   public Matrix4 update() {      return scale.copy().multiply(rotation).multiply(translation)            .multiply(projection);   }`

This is how I'm setting the data for the attribute (it shouldn't really matter since orthographic projection works and uses the same data):
 1  2  3  4  5  6  7  8  9  10 `data = FloatBufferIO.create(0f, 0f, 100f, 0f, 0f, 100f, 100f, 100f);vertices = new BufferObject(Target.ARRAY_BUFFER, data,      Usage.STATIC_DRAW);vao = new VertexArrayObject();vao.attach();vertices.attach();vao.formatAttributeData(program.getAttributeIndex("position"), 2, // enables the attribute & calls glVertexAttribPointer      DataType.SIGNED_FLOAT, false, 8, 0);VertexArrayObject.detach();`

When resized (and when the camera is created), this is called in the PerspectiveCamera class:
 1  2  3  4 `projection.overwrite(new float[] { (2f * zNear) / width, 0f, 0f, 0f,      0f, (2f * zNear) / height, 0f, 0f, (2f * x + width) / width,      (2f * y + height) / height, -(-zFar + zNear) / (zFar - zNear),      -1f, 0f, 0f, -(2f * zFar * zNear) / (zFar - zNear), 0f });`

Sorry if it's unclear. If you want to see anything else just ask.

Edit: This is my matrix multiplication method (it seems to work correctly, judging by the debugging results):
 1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80 `      float m00 = (components[0] * matrix.components[0])            + (components[1] * matrix.components[4])            + (components[2] * matrix.components[8])            + (components[3] * matrix.components[12]);      float m01 = (components[0] * matrix.components[1])            + (components[1] * matrix.components[5])            + (components[2] * matrix.components[9])            + (components[3] * matrix.components[13]);      float m02 = (components[0] * matrix.components[2])            + (components[1] * matrix.components[6])            + (components[2] * matrix.components[10])            + (components[3] * matrix.components[14]);      float m03 = (components[0] * matrix.components[3])            + (components[1] * matrix.components[7])            + (components[2] * matrix.components[11])            + (components[3] * matrix.components[15]);      float m10 = (components[4] * matrix.components[0])            + (components[5] * matrix.components[4])            + (components[6] * matrix.components[8])            + (components[7] * matrix.components[12]);      float m11 = (components[4] * matrix.components[1])            + (components[5] * matrix.components[5])            + (components[6] * matrix.components[9])            + (components[7] * matrix.components[13]);      float m12 = (components[4] * matrix.components[2])            + (components[5] * matrix.components[6])            + (components[6] * matrix.components[10])            + (components[7] * matrix.components[14]);      float m13 = (components[4] * matrix.components[3])            + (components[5] * matrix.components[7])            + (components[6] * matrix.components[11])            + (components[7] * matrix.components[15]);      float m20 = (components[8] * matrix.components[0])            + (components[9] * matrix.components[4])            + (components[10] * matrix.components[8])            + (components[11] * matrix.components[12]);      float m21 = (components[8] * matrix.components[1])            + (components[9] * matrix.components[5])            + (components[10] * matrix.components[9])            + (components[11] * matrix.components[13]);      float m22 = (components[8] * matrix.components[2])            + (components[9] * matrix.components[6])            + (components[10] * matrix.components[10])            + (components[11] * matrix.components[14]);      float m23 = (components[8] * matrix.components[3])            + (components[9] * matrix.components[7])            + (components[10] * matrix.components[11])            + (components[11] * matrix.components[15]);      float m30 = (components[12] * matrix.components[0])            + (components[13] * matrix.components[4])            + (components[14] * matrix.components[8])            + (components[15] * matrix.components[12]);      float m31 = (components[12] * matrix.components[1])            + (components[13] * matrix.components[5])            + (components[14] * matrix.components[9])            + (components[15] * matrix.components[13]);      float m32 = (components[12] * matrix.components[2])            + (components[13] * matrix.components[6])            + (components[14] * matrix.components[10])            + (components[15] * matrix.components[14]);      float m33 = (components[12] * matrix.components[3])            + (components[13] * matrix.components[7])            + (components[14] * matrix.components[11])            + (components[15] * matrix.components[15]);      components[0] = m00;      components[1] = m01;      components[2] = m02;      components[3] = m03;      components[4] = m10;      components[5] = m11;      components[6] = m12;      components[7] = m13;      components[8] = m20;      components[9] = m21;      components[10] = m22;      components[11] = m23;      components[12] = m30;      components[13] = m31;      components[14] = m32;      components[15] = m33;`

Edit2: I'll try transposing the projection matrix, since the page you linked me to has the exact same matrix transposed. It doesn't display, however this is the result:

Quote
Projection: [0.0025, 0.0, 1.0, 0.0, 0.0, 0.0033333334, 1.0, 0.0, 0.0, 0.0, 1.0, -2.002002, 0.0, 0.0, -1.0, 0.0]
Scale: [1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]
Rotation: [1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]
Translation: [1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]
trsp: [0.0025, 0.0, 1.0, 0.0, 0.0, 0.0033333334, 1.0, 0.0, 0.0, 0.0, 1.0, -2.002002, 0.0, 0.0, -1.0, 0.0]
[0.25, 0.33333334, -2.002002, 0.0]

Edit3: Never-mind, that was based on row major order. It gives the exact same matrix. I think that the issue must be related to something else.
66  Game Development / Newbie & Debugging Questions / Perspective projection matrix incorrect on: 2014-02-04 11:53:00
I spent most of yesterday debugging because I couldn't implement perspective projection. Anyway, I thought my issue was the fact that my matrix multiplication was incorrect, which I fixed (I then spent an hour this morning fixing orthographic projection). Now I'm having trouble getting perspective projection to work, which I've tried to debug but I'm not sure how to fix it.

Orthographic projection:
 1  2  3  4 `projection.overwrite(new float[] { 2f / width, 0f, 0f, 0f, 0f,      2f / height, 0f, 0f, 0f, 0f, -2f, 0f,      -((x * 2f + width) / width), -((y * 2f + height) / height),      -1f, 1f });`

t = top, b = bottom, l = left, r = right

Debugging results (it works):

Quote
Projection: [0.0025, 0.0, 0.0, 0.0, 0.0, 0.0033333334, 0.0, 0.0, 0.0, 0.0, -2.0, 0.0, -1.0, -1.0, -1.0, 1.0]
Scale: [1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]
Rotation: [1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]
Translation: [1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]

trsp: [0.0025, 0.0, 0.0, 0.0, 0.0, 0.0033333334, 0.0, 0.0, 0.0, 0.0, -2.0, 0.0, -1.0, -1.0, -1.0, 1.0]
[0.25, 0.33333334, 0.0, -199.0] <--- viewProjection(trsp) * (100, 100, 0, 1)

Perspective projection:
 1  2  3  4 `      projection.overwrite(new float[] { (2f * zNear) / width, 0f, 0f, 0f,            0f, (2f * zNear) / height, 0f, 0f, (2f * x + width) / width,            (2f * y + height) / height, -(-zFar + zNear) / (zFar - zNear),            -1f, 0f, 0f, -(2f * zFar * zNear) / (zFar - zNear), 0f });`

t = top, b = bottom, l = left, r = right, n = zNear, f = zFar

Debugging results - n = 1, f = 100 (nothing is displayed):

Quote
Projection: [0.0025, 0.0, 0.0, 0.0, 0.0, 0.0033333334, 0.0, 0.0, 1.0, 1.0, 1.0, -1.0, 0.0, 0.0, -2.020202, 0.0]
Scale: [1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]
Rotation: [1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]
Translation: [1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]

trsp: [0.0025, 0.0, 0.0, 0.0, 0.0, 0.0033333334, 0.0, 0.0, 1.0, 1.0, 1.0, -1.0, 0.0, 0.0, -2.020202, 0.0]
[0.25, 0.33333334, 199.0, 0.0] <-- I'm guessing it's something to do with the Z or with the W coordinate?

What could the problem be? I'm not really sure what I'm doing wrong. I've tried translating the Z coordinate and extending the far pane, but I see nothing. I'm clearing the depth buffer and I tried enabling depth testing. None of those things worked.

EDIT: I think it must be something to do with the Z coordinate, since when I translate it, the W coordinate changes but nothing is displayed.
 67 Discussions / Miscellaneous Topics / Re: Optimal size of a blog post? on: 2014-02-03 10:56:31 Short, to the point posts keep the reader interested. I'd say 250-500 words is a good size. If they're any longer then the reader will lose interest quite quickly.
 68 Discussions / General Discussions / Re: New feature: coding experience on: 2014-02-01 18:11:23 Quote from: Riven on 2014-02-01 17:57:07In other news, I saw somebody put '30 years' for general coding expereince, which was the maximum value, so I increased the max to 50 years. Now that should be enough, right...?Quote from: Riven on 2014-02-01 17:57:07you ought to know better than to ask that questionDamnthatquotelimitdamnthatquotelimit...
 69 Game Development / Newbie & Debugging Questions / Re: New on java game developing! on: 2014-02-01 18:07:49 Quote from: Jimmt on 2014-02-01 18:03:07Um, no offense to anyone here but I wouldn't be recommending your MERCury project as anything you should use to start off with, considering it's still in development and not really up to the level of libgdx and other libraries (yet).I'm not involved in the MERCury project. I just listed it to keep the OPs options open, after all, it's usable for small projects.
 70 Discussions / General Discussions / Re: New feature: experience on: 2014-02-01 17:35:24 Nice feature, however I'm concerned that it could possibly make some users discriminate against others.Edit: You made a rookie mistake. You missed out 6-9 months.
71  Game Development / Newbie & Debugging Questions / Re: New on java game developing! on: 2014-02-01 14:26:30
You have multiple options. It's really up to you which you choose, but I'll offer some advice.

## Option 1:

Start off by using Java2D (Swing & AWT). In my opinion this is the easiest way to start. Whether you're familiar with Swing or not, I'd definitely recommend to start this way. You'll easily be able to learn about the core concepts of game development: the game loop, collision detection, collision response, etc. The downside of using Java2D however is that it's slow for content-rich games and doesn't offer you too much flexibility, for example you can't use it for Android game development.

## Option 2:

Start off by using a game engine, preferrably built on top of LWJGL. This is probably the hardest way to start and is not recommended. There are a few decent game engines. For 2D games you can use: Slick2D, LibGDX, MERCury and many more. Of those, LibGDX is most recommended as you can use it to develop Desktop and Android games, however it's quite advanced and is difficult to use. Some understanding of OpenGL is recommended before using a game engine.

## Option 3:

Start off by using OpenGL. To do this you can use LWJGL or JOGL, though LWJGL is usually preferred. Learning OpenGL is difficult; it's very difficult to get started, however once you progress it gets easier (well that's what I've found). With OpenGL you have to be aware that there's a lot of different versions and not too many graphics cards support the newest versions. It's probably easiest to start off by learning the fixed function pipeline but it's recommended that after maybe a month you should progress on to the programmable pipeline. Learning the programmable pipeline requires some understanding (though it can be learnt) of vector and matrix maths. The maths is probably the most difficult part, however once you learn it then everything makes a lot more sense.

Conclusion: I recommend start off with Java2D then progressing to LWJGL. Before you start game development though, it's required to have a good understanding of the language. You should at least know about concepts such as polymorphism and inheritance.
 72 Java Game APIs & Engines / OpenGL Development / Re: Shaders & Programs - validation, info log... on: 2014-01-31 19:36:07 How about validation, and how should I use info logs?
73  Java Game APIs & Engines / OpenGL Development / Shaders & Programs - validation, info log... on: 2014-01-31 19:01:12
I've always set up shaders like so:
 1  2  3  4  5  6  7 `handle = GL.glCreateShader(type);      GL.glShaderSource(handle, source);            GL.glCompileShader(handle);if (GL.glGetShaderiv(handle, ShaderState.COMPILE_STATUS) == GL.FALSE)   throw new OpenGLException("Error compiling shader: " + handle);`

And I've always set up program objects like so:
 1  2  3  4  5  6  7  8  9  10  11 `handle = GL.glCreateProgram();for (ShaderObject shaderObj : shaderObjs)   GL.glAttachShader(handle, shaderObj.getHandle());GL.glLinkProgram(handle);if (GL.glGetProgramiv(handle, ProgramState.LINK_STATUS) == GL.FALSE)   throw new OpenGLException("Error linking program: " + handle);for (ShaderObject shaderObj : shaderObjs)   GL.glDetachShader(handle, shaderObj.getHandle());`

I'm not exactly sure what else I should do; I've previously seen the use of glValidateProgram and checking that the program is validated. However, I'm not sure if it's necessary. If it's compiled and linked successfully, won't that mean that it's validated for use? Also I've known about the use of info-logs and I'm not exactly sure how I should use them and what to use them for. On top of that, is there anything else I should known about?

Oh and I nearly forgot, should I always detach shader objects from the program after the program is linked? Is there any reason that you'd keep them attached?
 74 Game Development / Newbie & Debugging Questions / Re: move the ball when the space key was pressed on: 2014-01-31 14:05:51 Quote from: yokiyoki on 2014-01-31 13:39:29Is it possible to call the KeyEvent inside the moveBall()?Learn the language before attempting to learn game development. Spend at least 2-3 weeks reading these tutorials and making a few really basic programs, then you might be ready to try again.
 76 Game Development / Newbie & Debugging Questions / Re: (Marte Engine, Slick2d) Basic Player Movement Problem on: 2014-01-30 17:16:01 If every entity holds a position (which I suspect is the case), then handle the position within the Entity class.
 77 Discussions / General Discussions / Re: When you're typing on the keyboard, how slouched are you sitting in your chair? on: 2014-01-30 16:38:33
78  Game Development / Newbie & Debugging Questions / Re: (Marte Engine, Slick2d) Basic Player Movement Problem on: 2014-01-30 16:19:26
How is the sprite drawn? If I were to take a guess, judging by the code you posted, it's probably because the position should be handled in the superclass, however you're handling it in the Player class.

 1  2  3  4 `private void setPosition(float x2, float y2) {      this.x = x2;      this.y = y2;}`

Shouldn't you be calling super.x?
You're passing the position to the superclass constructor upon creation of the object, so why are you handling the position in the sub-class?
 79 Discussions / General Discussions / Re: JGO coinage tally on: 2014-01-29 14:33:32 Quote from: Riven on 2014-01-29 14:23:42Regular members don't even notice the sidebar, while they would certainly notice themselves giving a donation. So again, asking for money directly is 'way more' feeding off the community than selling brain-time of mostly non-members.Anyway, I'd like to hear suggestions that doesn't involve the community paying me, as that has quite a few downsides, and would barely bring in any money, I suspect.Put it to a poll and you will be able to see what the community thinks. The community is receiving a service - it's only fair on your behalf that we get the option to give something in return.As for suggestions that don't involve donations from the community (and regular unregistered visitors I suspect), I don't think there are any options other than advertisement. You could add more advertisements, or find a different ad company which pays more.
 80 Discussions / General Discussions / Re: JGO coinage tally on: 2014-01-29 13:34:41 Quote from: Riven on 2014-01-29 13:14:59Whether it's subscriptions or donations, I'm against feeding off the community, on this one. Given the size of this community (it's rather small) people would have to pay/donate rather often to make it amount to anything.Meanwhile there are other, imho, better ways to finance the hosting costs.I don't think there are many options other than allowing the community to donate in one way or another. You wouldn't really be feeding off the community, since it'd be optional, however I think that giving someone who donates a displayable status isn't a good idea, for several reasons.You should at least try it out; you'd probably get more donations than you think. After all, the community is really helpful, and some users may want to contribute to the hosting costs.
 81 Discussions / General Discussions / Re: JGO coinage tally on: 2014-01-29 12:25:43 Slap Google on the wrist and tell them off.Maybe you could get the \$1112 back in another poker game..?On a more serious note, how about allowing users to get their game advertised on JGO. More specifically, adding a banner at the bottom (or somewhere else) and allowing users to "bid" to get their game advertised there for a month. It probably won't make too much, but it could make something.
 82 Discussions / General Discussions / Re: Anyone played this before? on: 2014-01-28 16:32:56 Where did 3 hours of my life just go..? That 1750 score took so long...
 83 Games Center / WIP games, tools & toy projects / Re: Renoria - Java MMORPG on: 2014-01-28 15:18:34 That's a screenshot from the gif you posted, where you jumped through it from top to bottom though.
 84 Games Center / WIP games, tools & toy projects / Re: Renoria - Java MMORPG on: 2014-01-28 15:15:50 Wow the animations are amazing. Really nice work, however now I hate you for killing cute fluffy bunnies!By the way, is this bad collision detection, or the desired effect?
 85 Game Development / Newbie & Debugging Questions / Re: VBO with vertex,texCoord and color data on: 2014-01-28 13:27:37 Quote from: Doubstract on 2014-01-28 13:11:41When i am starting this program, i get only my blocks with textures, but no colors (i get only texture colors).Did you fix the bug in the line I quoted? Did you enable colour arrays?
 86 Discussions / General Discussions / A message to those aspiring game developers on: 2014-01-28 13:25:56 Most people think that it would be "cool" to be a successful game developer, myself included. Just 7 months ago, I curiously searched how to learn to develop games. I looked up several programming languages that I'd heard off: C, C++, Java, C#. I decided that I'd choose Java; I liked the way that the syntax looked consistent and clean, and that it has its own official tutorials. As expected, I spent a couple of days learning about variables, arrays and loops and decided that I was ready to make games. NO! NO! NO! I was copying code from videos, learning nothing in the process. Fortunately, after a week I realised that I needed to spend more time learning, so I spent the next two months creating really basic programs. I then decided to re-enter the realms of game development and that's where the journey truly started.Life story aside, let me get to the point. It was all fun and games for me *pun unintended*, however recently I've noticed a lot of people joining this forum, asking for help with really basic things such as debugging stack traces, asking about control flow, etc. I've also noticed people who quite blatantly copy and paste snippets of code and then ask why they're getting an error, or why their code "isn't working". The fact is that if you do this, you have no chance of getting in to the games industry. Learning how to code is like learning how to read - you have to practice and study. You aren't going to learn anything by copy and pasting something, or by asking someone to fix an error for you. Learning is difficult and time consuming, but if you want to be successful then you have to do it.TLDR/Conclusion: If you want to be successful, study hard and be patient. Fix your own bugs and learn from your mistakes.
 87 Discussions / Miscellaneous Topics / Re: Screenshot program: Greenshot on: 2014-01-28 12:37:41 There are a lot of these sorts of programs available. I personally use lightshot.
88  Game Development / Newbie & Debugging Questions / Re: VBO with vertex,texCoord and color data on: 2014-01-27 19:36:17
 1 `GL11.glColorPointer(3, GL_FLOAT, 7 << 2, 4 << 3);`
<< *cough, cough*