Git Product home page Git Product logo

opengles3-book's People

Contributors

akbot48 avatar bpurnomo avatar chicio avatar cook avatar danginsburg avatar ds-hwang avatar javedrabbani avatar lysandergg avatar mortennobel avatar podsvirov 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

opengles3-book's Issues

Current Mali Emulator (2.2) also requires linking against libMaliEmulator.lib

The current version of the MaliEmulator requires linking against libMaliEmulator.lib in addition to libGLESv2 and libEGL. The projects spat out by CMake therefore fail to build out of the box. It's trivial to add but some newcomers may trip over this. Worth adding something to the CMake config to deal with this?

Does "rotate" function and "frustum" funtion should works in the same way when compare with mesa lib??

As I can't reopen #31 , so i open a new issue.
I think there are still something wrong in transform functions.
When compare mesa code and es3 book code,
in "rotate" function, M(row, col) == m[row][col].
but in "frustum" funtions, _M(row, col) == m[col][row]_.
as mesa use 1-D array "M[ ]" stored in column-major, and "#define M(row,col) m[col * 4+row]"; es3 book source code use 2-D array "m[ ][ ]".

Does "rotate" function and "frustum" functions both should be either M(row, col) ==m[row][col] or M(row, col) == m[col][row]???
Or say another way, if we compare the data sequence of 2-D array "m[ ][ ]" which store row by row in the client memory, with the data sequence of 1-D array "M[ ]" in mesa in the client memory, they should be same?? And the data sequences are same when i compare "frustum" & "tranlation" & "scale" functions between mesa code and es3 book code, but "rotate" function doesn't, that's weird.

Mesa v10.6.5 rotate works:

      xx = x * x;
      yy = y * y;
      zz = z * z;
      xy = x * y;
      yz = y * z;
      zx = z * x;
      xs = x * s;
      ys = y * s;
      zs = z * s;
      one_c = 1.0F - c;

      /* We already hold the identity-matrix so we can skip some statements */
      M(0,0) = (one_c * xx) + c;
      M(0,1) = (one_c * xy) - zs;
      M(0,2) = (one_c * zx) + ys;
/*    M(0,3) = 0.0F; */

      M(1,0) = (one_c * xy) + zs;
      M(1,1) = (one_c * yy) + c;
      M(1,2) = (one_c * yz) - xs;
/*    M(1,3) = 0.0F; */

      M(2,0) = (one_c * zx) - ys;
      M(2,1) = (one_c * yz) + xs;
      M(2,2) = (one_c * zz) + c;
/*    M(2,3) = 0.0F; */
es3 book code rotate works:

      xx = x * x;
      yy = y * y;
      zz = z * z;
      xy = x * y;
      yz = y * z;
      zx = z * x;
      xs = x * sinAngle;
      ys = y * sinAngle;
      zs = z * sinAngle;
      oneMinusCos = 1.0f - cosAngle;

      rotMat.m[0][0] = ( oneMinusCos * xx ) + cosAngle;
      rotMat.m[0][1] = ( oneMinusCos * xy ) - zs;
      rotMat.m[0][2] = ( oneMinusCos * zx ) + ys;
      rotMat.m[0][3] = 0.0F;

      rotMat.m[1][0] = ( oneMinusCos * xy ) + zs;
      rotMat.m[1][1] = ( oneMinusCos * yy ) + cosAngle;
      rotMat.m[1][2] = ( oneMinusCos * yz ) - xs;
      rotMat.m[1][3] = 0.0F;

      rotMat.m[2][0] = ( oneMinusCos * zx ) - ys;
      rotMat.m[2][1] = ( oneMinusCos * yz ) + xs;
      rotMat.m[2][2] = ( oneMinusCos * zz ) + cosAngle;
      rotMat.m[2][3] = 0.0F;

      rotMat.m[3][0] = 0.0F;
      rotMat.m[3][1] = 0.0F;
      rotMat.m[3][2] = 0.0F;
      rotMat.m[3][3] = 1.0F;

Then in above codes, M(row, col) == m[row][col], The single data sequence in two matrixes are not in the same sequence in the client memory.

however, in frustum function,

Mesa v10.6.5 frustum works:

   x = (2.0F*nearval) / (right-left);
   y = (2.0F*nearval) / (top-bottom);
   a = (right+left) / (right-left);
   b = (top+bottom) / (top-bottom);
   c = -(farval+nearval) / ( farval-nearval);
   d = -(2.0F*farval*nearval) / (farval-nearval);  /* error? */

#define M(row,col)  m[col*4+row]
   M(0,0) = x;     M(0,1) = 0.0F;  M(0,2) = a;      M(0,3) = 0.0F;
   M(1,0) = 0.0F;  M(1,1) = y;     M(1,2) = b;      M(1,3) = 0.0F;
   M(2,0) = 0.0F;  M(2,1) = 0.0F;  M(2,2) = c;      M(2,3) = d;
   M(3,0) = 0.0F;  M(3,1) = 0.0F;  M(3,2) = -1.0F;  M(3,3) = 0.0F;
#undef M
es3 book code frustum works:

   frust.m[0][0] = 2.0f * nearZ / deltaX;
   frust.m[0][1] = frust.m[0][2] = frust.m[0][3] = 0.0f;

   frust.m[1][1] = 2.0f * nearZ / deltaY;
   frust.m[1][0] = frust.m[1][2] = frust.m[1][3] = 0.0f;

   frust.m[2][0] = ( right + left ) / deltaX;
   frust.m[2][1] = ( top + bottom ) / deltaY;
   frust.m[2][2] = - ( nearZ + farZ ) / deltaZ;
   frust.m[2][3] = -1.0f;

   frust.m[3][2] = -2.0f * nearZ * farZ / deltaZ;
   frust.m[3][0] = frust.m[3][1] = frust.m[3][3] = 0.0f;

in above codes, _M(row, col) == m[col][row] , as M(0,2) == m[2][0], M(1,2) == m[2][1], M(2,3) == m[3][2], ._ The single data sequence in two matrixes are in the same sequence in the client memory as 2-D array m[ ][ ] stores row by row.

Chapter 6: P.129 Example 6-1 _TEXCOORD1_ misspelled to _TEXC00RD1_ many times, should O, but 0

Should be TEXCOORD1, but TEXC00RD1

P.129:

#define VERTEX_TEXC00RD1_0FFSET      8
#define VERTEX_ATTRIB_SIZE   (VERTEX_POS_SIZE + \
                              VERTEX_NORMAL_SIZE + \
                              VERTEX_TEXCOORD0_SIZE + \
                              VERTEX_TEXC00RD1_SIZE)

P.130:

(p + VERTEX_TEXC00RD1_0FFSET));

float *texcoordl = (float*) malloc(numVertices *
   VERTEX_TEXC00RD1_SIZE * sizeof(float));

// texture coordinate 1 is vertex attribute 3
glVertexAttribPointer(VERTEX_TEXCOORDl_INDX,
                      VERTEX_TEXC00RD1_SIZE,
                      GL_FLOAT, GL_FALSE,
                      VERTEX_TEXC00RD1_SIZE * sizeof(float),
                      texcoordl);

Incomplete description of pixels argument if using unpack buffer object

book, page 233, 261, 264, 266, 267, 268 and 269.
for the functions glTexImage_, glTexSubImage_, glCompressedTexImage_, glCompressedTexSubImage_,
These descriptions of "pixels" are incomplete with regard to unpack buffer object. As described later in the book this argument can be an offset. I think that these descriptions should mention their use with unpack buffer object.

How to add xyz points dynamically to generate a 3d graph?

Hello, I have a need as follows:

  1. Draw a three-dimensional coordinate system, and can achieve the zoom function.
  2. Other modules constantly send me 3D coordinate points, which I need to draw on the coordinate system.
  3. How should I deal with these massive data. Are they all in VBO?
    Can you give me some ideas or examples?
    Thank you very much.

Possible error in glVertexAttribDivisor

Chapter 7. Primitive Assembly and Rasterization > 2. Drawing Primitives

"The first method is to instruct OpenGL ES to read vertex attributes once or multiple times per instance using the following command"

It seems to me this should be: once per instance or per multiple-instances.

glVertexAttribDivisor

Book, page 171, top of the page, 1st paragraph
"If divisor equals 1, then the vertex attributes will be read once per primitive instance."
This doesn't explain the situation when divisor is larger than 1.
Spec 3.1, page 241:
"Otherwise, attributes advance once per divisor instances of the set(s) of vertices being rendered."

An error in appendix A

The last eg in section "16-Bit Floating-Point Number" of appendix A :
0 10100 1010101010 = 54.375
does it should be 53.3125 not 54.375 ?

error: kindle edition: location: ~1970

Once you have a program object created, the next step is to attach shaders to it. In OpenGL ES 3.0, each program object needs to have one vertex shader and one fragment shader object attached to it. To attach shaders to a program, you use glAttachShader.

WRONG IMAGE INSERTED HERE
Image is for glDetachShader instead for glAttachShader

This function attaches the shader to the given program. Note that a shader can be attached at any point— it does not necessarily need to be compiled or even have source code before being attached to a program. The only requirement is that every program object must have one and only one vertex shader and fragment shader object attached to it. In addition to attaching shaders, you can detach shaders using glDetachShader. Once the shaders have been attached (and the shaders have been successfully compiled), we are finally ready to link the shaders together. Linking a program object is accomplished using glLinkProgram.

Ginsburg, Dan; Purnomo, Budirijanto; Shreiner, Dave; Munshi, Aaftab (2014-02-28). OpenGL ES 3.0 Programming Guide (2nd Edition) (Kindle Locations 1973-1982). Pearson Education. Kindle Edition.

Possible error (omission) related to compressed textures and glGenerateMipmap()

Page 265 says, "Once a texture has been loaded as a compressed texture, it can be used for texturing in exactly the same way as an uncompressed texture."

In my opinion, this statement about "exactly the same way" is not entirely true. Calling glGenerateMipmap() on a compressed texture returns an error in most drivers. This is not noted on page 265 or on page 242 where "Automatic Mipmap Generation" is covered. It would be helpful if the restriction on compressed texture mipmap generation is noted somewhere.

The ES 3.0 man page says that glGenerateMipmap() is unsupported on compressed base level:

GL_INVALID_OPERATION is generated if the levelbase array is stored in a compressed internal format.

http://docs.gl/es3/glGenerateMipmap

The rotation direction of the esRotate is inverted

For example, esRotate(45, 0.f, 0.f, 1.f) should rotate counter clockwised but clockwised actually.

From the other codes, such as the implementation of the function esTranslate and the transpose parameter of the glUniformMatrix4fv always being setted to GL_FALSE, the model matrix is seemed to be column majored, but the implementation of the esRotate and esMatrixMultiply are row majored.

How confusing the codes are!

Does rotMat in esRotate() should be the tranposed?

After compared with mesa lib, i got confused with these matrixes. As the "frust" in esFrustum(), "result" in esTranslate() and esScale() are using the transpose of standard transform matrix, does "rotMat" in esRotate() should be the tranposed(as below)?

      rotMat.m[0][0] = ( oneMinusCos * xx ) + cosAngle;
      rotMat.m[1][0] = ( oneMinusCos * xy ) - zs;
      rotMat.m[2][0] = ( oneMinusCos * zx ) + ys;
      rotMat.m[3][0] = 0.0F;

      rotMat.m[0][1] = ( oneMinusCos * xy ) + zs;
      rotMat.m[1][1] = ( oneMinusCos * yy ) + cosAngle;
      rotMat.m[2][1] = ( oneMinusCos * yz ) - xs;
      rotMat.m[3][1] = 0.0F;

      rotMat.m[0][2] = ( oneMinusCos * zx ) - ys;
      rotMat.m[1][2] = ( oneMinusCos * yz ) + xs;
      rotMat.m[2][2] = ( oneMinusCos * zz ) + cosAngle;
      rotMat.m[3][2] = 0.0F;

      rotMat.m[0][3] = 0.0F;
      rotMat.m[1][3] = 0.0F;
      rotMat.m[2][3] = 0.0F;
      rotMat.m[3][3] = 1.0F;

but the orignal "rotMat" in esRotate() works:

      rotMat.m[0][0] = ( oneMinusCos * xx ) + cosAngle;
      rotMat.m[0][1] = ( oneMinusCos * xy ) - zs;
      rotMat.m[0][2] = ( oneMinusCos * zx ) + ys;
      rotMat.m[0][3] = 0.0F;

      rotMat.m[1][0] = ( oneMinusCos * xy ) + zs;
      rotMat.m[1][1] = ( oneMinusCos * yy ) + cosAngle;
      rotMat.m[1][2] = ( oneMinusCos * yz ) - xs;
      rotMat.m[1][3] = 0.0F;

      rotMat.m[2][0] = ( oneMinusCos * zx ) - ys;
      rotMat.m[2][1] = ( oneMinusCos * yz ) + xs;
      rotMat.m[2][2] = ( oneMinusCos * zz ) + cosAngle;
      rotMat.m[2][3] = 0.0F;

      rotMat.m[3][0] = 0.0F;
      rotMat.m[3][1] = 0.0F;
      rotMat.m[3][2] = 0.0F;
      rotMat.m[3][3] = 1.0F;

glTexStorage2D( GL_TEXTURE_CUBE_MAP )

According to the GLES 3.0 spec, it appears that the following GL call is valid for cube maps (see section 3.8.4 on pg. 137):

glTexStorage2D( GL_TEXTURE_CUBE_MAP, ... )

This usage is also described in GL-land (ARB_texture_storage ext spec, OpenGL Programming Guide, etc.).

However, it appears that the OpenGL ES 3.0 Programming Guide is not consistent with the GLES 3.0 spec here. It does not list GL_TEXTURE_CUBE_MAP as a valid option for target, and it lists the face enums (GL_TEXTURE_CUBE_MAP_{POSITIVE,NEGATIVE}_{X,Y,Z}) as valid options for target.

Table 9-5: GL_RGB5_A1

Book, page 248
In table 9-5, the type of GL_RGB5_A1 should be "UNSIGNED_SHORT_5_5_5_1" instead of "UNSIGNED_SHORT_2_10_10_10_REV"

'indentity'

The brief comments for esMatrixLoadIdentity mention an indentity matrix.

Chapter 6: Example 6-6: No information provided on what's passed in as GLfloat **vtxBuf

In the example 6-6, signature of DrawPrimitiveWithVBOs() changes from that in example 6-5. The argument GLfloat *vertices is suddenly GLfloat **vtxBuf in example 6-6 .

In example 6-5 the caller of DrawPrimitiveWithVBOs() is clearly shown, passing vertices for the argument GLfloat *vtxBuf. But there is no indication in the book on what is passed in for GLfloat **vtxBuf that's later accessed with vtxBuf[0] and vtxBuf[1]. Passing in the same GLfloat vertices[] will not work in example 6-6.

Having two functions of exact same name with a sudden change of signature and no clear indication could be confusing, especially when reading the text without close inspection of the source code here on github.

Can not run on Linux X11

Hi,
I installed PowerVR SDK in my Linux computer for learnning OpenGLES and I download this tutorials.
Codes has been compiled and no errors pop. But there is no window appear when I run executable file under Linux OS.

I has been added libraryies ie,libGLESv2.so libEGL.so into system environments.

Can you help me? thanks!

Beginner here! Help with linker issues for example from opengles3-book Chapter 2 - Hello_Triangle

Hey guys, I am very new to OpenGL development. I am learning to develop Open GL ES 3 apps following your book. Here is current environment spec:

Emulator: Mali_OpenGL_ES_Emulator-v3.0.2.g694a9-Windows-64bit
IDE: Visual Studio 2015 Win64
Cmake version: 3.11.2
OS: Windows 10

I am referring the Chapter 16 for building it on Windows and for Visual Studio
After a lot of beating my head around and digging, I managed to bring down the number of Linker issues that I was getting. Currently I am stuck on 2 linker issues that I unable to resolved or get any help.

image

Error LNK1120 2 unresolved externals Hello_Triangle C:\Users\nikhil.bagul\Documents\OpenGLES\Projects\opengles3-book\Chapter_2\Hello_Triangle\VisualStudioSolution64\Release\Hello_Triangle.exe 1

Error LNK2019 unresolved external symbol main referenced in function "int __cdecl __scrt_common_main_seh(void)" (?__scrt_common_main_seh@@yahxz) Hello_Triangle C:\Users\nikhil.bagul\Documents\OpenGLES\Projects\opengles3-book\Chapter_2\Hello_Triangle\VisualStudioSolution64\MSVCRT.lib(exe_main.obj) 1

Error LNK2019 unresolved external symbol WinCreate referenced in function esCreateWindow Hello_Triangle C:\Users\nikhil.bagul\Documents\OpenGLES\Projects\opengles3-book\Chapter_2\Hello_Triangle\VisualStudioSolution64\esUtil.obj 1

Any help is much appreciated.
Thanks!

Get library

Where can I get both of libEGL.lib and libGLESv2.lib?

Example 2 Triangle NDK OpenGL ES API with no current context

I buy the book. The example 2 of the triangle, I do steps of chapter 16 for build with Android NDK.

I have android 4.4.2.
NDK: android-ndk-r10e

ENVIRONMENT VARIABLES WITH CYGWIN:

export JAVA_HOME="/cygdrive/c/Program Files/Java/jdk1.7.0_45"
export ANDROID_SDK=/cygdrive/c/Users/steven.mendez/sdk
export ANDROID_NDK=/cygdrive/c/Users/steven.mendez/Documents/Development/Android/android-ndk-r10e
export ANT=/cygdrive/c/Users/steven.mendez/Documents/Development/apache-ant-1.9.2\bin
export PATH=$PATH:${ANDROID_NDK}
export PATH=$PATH:${ANT}
export PATH=$PATH:${ANDROID_SDK}/tools
export PATH=$PATH:${ANDROID_SDK}/platform-tools.

After install(adb install -r bin/NativeActivity-debug.apk), I do test on my mobile, but the error on adb is:

E/cutils ( 177): Failed to mkdirat(/storage/sdcard1/Android): Read-only file system
W/ContextImpl(11766): Failed to ensure directory: /storage/sdcard1/Android/obb/com.openglesbook.HelloTriangle
E/cutils ( 177): Failed to mkdirat(/storage/sdcard1/Android): Read-only file system
W/ContextImpl(11766): Failed to ensure directory: /storage/sdcard1/Android/data/com.openglesbook.HelloTriangle/files
W/linker (11766): library "libmaliinstr.so" not found
W/linker (11766): error:
E/libEGL (11766): call to OpenGL ES API with no current context (logged once per thread)
E/libEGL (11766): call to OpenGL ES API with no current context (logged once per thread)
E/libEGL (11766): call to OpenGL ES API with no current context (logged once per thread)
I/AudioFlinger(11766): LppThread::~LppThread()
I/ActivityManager( 603): Displayed com.openglesbook.HelloTriangle/android.app.NativeActivity: +162ms
I/CpuGovernorPolicy( 868): cpu draw
W/Binder ( 805): Caught a RuntimeException from the binder stub implementation.
W/Binder ( 805): java.lang.NullPointerException
W/Binder ( 805): at android.inputmethodservice.IInputMethodWrapper.setSessionEnabled(IInputMethodWrapper.java:280)
W/Binder ( 805): at com.android.internal.view.IInputMethod$Stub.onTransact(IInputMethod.java:129)
W/Binder ( 805): at android.os.Binder.execTransact(Binder.java:404)
W/Binder ( 805): at dalvik.system.NativeStart.run(Native Method)
W/System.err( 805): java.lang.NullPointerException
W/System.err( 805): at android.inputmethodservice.IInputMethodWrapper.setSessionEnabled(IInputMethodWrapper.java:280)
W/System.err( 805): at com.android.internal.view.IInputMethod$Stub.onTransact(IInputMethod.java:129)
W/System.err( 805): at android.os.Binder.execTransact(Binder.java:404)
W/System.err( 805): at dalvik.system.NativeStart.run(Native Method)
I/CpuGovernorPolicy( 868): gpu draw
I/DHCPCD ( 2214): wlan0: Router Advertisement from fe80::920d:cbff:fe36:d111
I/DHCPCD ( 2214): wlan0: fe80::920d:cbff:fe36:d111: expired Router Advertisement

example Hello_Triangle. glCreateShader() = 0

The example of Hello_Triangle.
`GLuint LoadShader ( GLenum type, const char *shaderSrc )
{
GLuint shader;
GLint compiled;

// Create the shader object
shader = glCreateShader ( type );
if (shader == 0)
{
return 0;
}

// Load the shader source
glShaderSource ( shader, 1, &shaderSrc, NULL );

// Compile the shader
glCompileShader ( shader );

// Check the compile status
glGetShaderiv ( shader, GL_COMPILE_STATUS, &compiled );

if ( !compiled )
{
GLint infoLen = 0;

  glGetShaderiv ( shader, GL_INFO_LOG_LENGTH, &infoLen );

  if ( infoLen > 1 )
  {
     char *infoLog = malloc ( sizeof ( char ) * infoLen );

     glGetShaderInfoLog ( shader, infoLen, NULL, infoLog );
     esLogMessage ( "Error compiling shader:\n%s\n", infoLog );

     free ( infoLog );
  }

  glDeleteShader ( shader );
  return 0;

}

return shader;

}`

why glCreateShader() return 0? I didn't change any code.

error: kindle edition: location: ~4168

Chapter 8, section Model-View Matrix seems to have a typo:
"To simply this process, we have included..."

I'm not a native speaker, but wouldn't this be more like:
"To simplify this process"?

The case of missing if? ;-)

Chapter_14/ParticleSystemTransformFeedback/ParticleSystemTransformFeedback.c line169

i can't understand the line 169,170.
the "lifetime" variable is always minus, there is no use deciding "lifetime <=0.0"
the code:

 float lifetime = a_curtime - u_time; 
 if( lifetime <= 0.0 && randomValue(seed) < u_emissionRate )
 {  
 }

i think it may be the following code, to decide whether the particle has
expired.
float lifetime = a_lifetime - (u_time - a_curtime);

error: kindle edition: location: ~4369

Chapter 8, section Vertex Skinning:
"Vertex Skinning is a commonly used technique whereby the joins between..."

Shouldn't this be like this?
"Vertex Skinning is a commonly used technique whereby the joints between..."

Again, I'm not a native speaker, but this also seems like a typo.

Sampler Objects: Sampler parameter name list is incorrect

The List of pnames on page 275 in the Sampler Object section includes some parameter names that cannot be used with glSamplerParameter*:

GL_TEXTURE_BASE_LEVEL
GL_TEXTURE_MAX_LEVEL
GL_TEXTURE_SWIZZLE_{R,G,B,A}

See Table 6.10 in GLES 3.0.4 spec or Table 20.11 in the GLES 3.1 spec

Can you please provide sample codes for Ch12.10?

I think reading sample codes is the best way to understand OpenGL ES, but there is some missing key code in the Ch12 sample code. Can you provide the full sample codes in Chapter 12, Section 10? Thx

GL_UNPACK_IMAGE_HEIGHT has incorrect description

Page 236 : Table 9-2 Pixel Storage Options

The description for GL_UNPACK_IMAGE_HEIGHT includes -
"If the value is zero, then the number of columns in the image is equal to the height".

This statement is incorrect (unless the image happens to be square).

It should read -
"If the value is zero, then the column height is equal to the image height" or
"If the value is zero, then the number of rows is equal to the image height"

Code does not work on MESA

Fedora 20/21 the code cannot compile using cmake because it cannot find its own header files.

Meanwhile the standard instructions from the book to run cmake ../ from a new build directory:

[min@priara Hello_Triangle]$ pwd
/home/min/Documents/code/opengles3-book/Chapter_2/Hello_Triangle
[min@priara Hello_Triangle]$ mkdir build
[min@priara Hello_Triangle]$ cd build
[min@priara build]$ cmake ..
-- The C compiler identification is GNU 4.9.1
-- The CXX compiler identification is GNU 4.9.1
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/min/Documents/code/opengles3-book/Chapter_2/Hello_Triangle/build
[min@priara build]$ make
Scanning dependencies of target Hello_Triangle
[100%] Building C object CMakeFiles/Hello_Triangle.dir/Hello_Triangle.c.o
/home/min/Documents/code/opengles3-book/Chapter_2/Hello_Triangle/Hello_Triangle.c:38:20: fatal error: esUtil.h: No such file or directory
#include "esUtil.h"
^
compilation terminated.
CMakeFiles/Hello_Triangle.dir/build.make:54: recipe for target 'CMakeFiles/Hello_Triangle.dir/Hello_Triangle.c.o' failed
make[2]: *** [CMakeFiles/Hello_Triangle.dir/Hello_Triangle.c.o] Error 1
CMakeFiles/Makefile2:60: recipe for target 'CMakeFiles/Hello_Triangle.dir/all' failed
make[1]: *** [CMakeFiles/Hello_Triangle.dir/all] Error 2
Makefile:76: recipe for target 'all' failed
make: *** [all] Error 2
[min@priara build]$

When attempting to compile the code using gcc by itself, I have managed to resolve all the symbols, but when run the program starts and exits without opening a window, displaying anything, or giving text in the form of an error message.

gcc -o Hello_Triangle Hello_Triangle.c -I../../Common/Include -lEGL -lGLESv2 -lX11 ../../Common/Source/esUtil.c ../../Common/Source/LinuxX11/esUtil_X11.c

This does compile, but does not appear to run properly.

OpenGL ES profile version string: OpenGL ES 3.0 Mesa 10.3.0-rc1
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.0
OpenGL ES profile extensions:
GL_ANGLE_texture_compression_dxt3, GL_ANGLE_texture_compression_dxt5,
GL_APPLE_texture_max_level, GL_EXT_blend_minmax,
GL_EXT_color_buffer_float, GL_EXT_discard_framebuffer,
GL_EXT_map_buffer_range, GL_EXT_multi_draw_arrays,
GL_EXT_read_format_bgra, GL_EXT_separate_shader_objects,
GL_EXT_shader_integer_mix, GL_EXT_texture_compression_dxt1,
GL_EXT_texture_filter_anisotropic, GL_EXT_texture_format_BGRA8888,
GL_EXT_texture_rg, GL_EXT_texture_type_2_10_10_10_REV,
GL_EXT_unpack_subimage, GL_NV_draw_buffers, GL_NV_fbo_color_attachments,
GL_NV_read_buffer, GL_OES_EGL_image, GL_OES_EGL_image_external,
GL_OES_compressed_ETC1_RGB8_texture, GL_OES_depth24, GL_OES_depth_texture,
GL_OES_depth_texture_cube_map, GL_OES_element_index_uint,
GL_OES_fbo_render_mipmap, GL_OES_get_program_binary, GL_OES_mapbuffer,
GL_OES_packed_depth_stencil, GL_OES_rgb8_rgba8,
GL_OES_standard_derivatives, GL_OES_stencil8, GL_OES_surfaceless_context,
GL_OES_texture_3D, GL_OES_texture_npot, GL_OES_vertex_array_object

uname -a
Linux priara.sonnet 3.16.1-301.fc21.x86_64 #1 SMP Mon Aug 25 13:06:39 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

delete shader in "Hello triangle"

Hi, I'm new to opengles.

In "Hello Triangle"'s Shutdown, you only call glDeleteProgram. Acctording to the document, glDeleteProgram doesn't delete the attached shaders. So is it nesscssory to call glDeleteShader in Shutdown or in LoadShader.

Is it illegal to bind a texture to stencil buffer of fbo?

In chapter 12 section "Framebuffer and Renderbuffer Object", it says we can bind a texture image or a renderbuffer object to color attachment or depth attachment of fbo, but we only can attach renderbuffer object to stencil attachment of fbo, so is it illegal to bind a texture to stencil buffer of fbo? The parameter "attachment" of glFramebufferTexture2D() can be GL_STECNCIL_ATTACHMENT, and I have searched the ES 3.0 specification, the spec doesn't say we can't bind a texture to stencil buffer of fbo. So i get confused and looking for help here~

error: kindle edition: location: 2227

// Bind the buffer object to the uniform block binding point
glBindBufferBase ( GL_UNIFORM_BUFFER, bindingPoint, buffer );

SHOULD BE:
glBindBufferBase ( GL_UNIFORM_BUFFER, bindingPoint, bufferId );

Ginsburg, Dan; Purnomo, Budirijanto; Shreiner, Dave; Munshi, Aaftab (2014-02-28). OpenGL ES 3.0 Programming Guide (2nd Edition) (Kindle Locations 2226-2227). Pearson Education. Kindle Edition.

Help! opengles3 book sample code build failed, error LNK2019: unresolved external symbol

I have tried to build the sample code on Visual Studio 2008 with the guide in Chapter 16. I used PowerVR SDK 3.5 on windows 7. I have set EGL_LIBRARY & OPENGLE3_LIBRARY to right path: D:\Imagination\PowerVR_Graphics\PowerVR_SDK\SDK_3.5\Builds\Windows\x86_64\Lib\libEGL.lib & libGLESv2.lib. But when i built the Hello_Triangle sample code, i got the following errors. I have tried some ways to fix it but failed. Does anyone have the same problem? Please help me.

2>Hello_Triangle.obj : error LNK2019: unresolved external symbol __imp__glDeleteShader@4 referenced in function _LoadShader
2>Hello_Triangle.obj : error LNK2019: unresolved external symbol __imp__glGetShaderInfoLog@16 referenced in function _LoadShader
2>Hello_Triangle.obj : error LNK2019: unresolved external symbol __imp__glGetShaderiv@12 referenced in function _LoadShader
2>Hello_Triangle.obj : error LNK2019: unresolved external symbol __imp__glCompileShader@4 referenced in function _LoadShader
2>Hello_Triangle.obj : error LNK2019: unresolved external symbol __imp__glShaderSource@16 referenced in function _LoadShader
2>Hello_Triangle.obj : error LNK2019: unresolved external symbol __imp__glCreateShader@4 referenced in function _LoadShader
2>Hello_Triangle.obj : error LNK2019: unresolved external symbol __imp__glClearColor@16 referenced in function _Init
2>Hello_Triangle.obj : error LNK2019: unresolved external symbol __imp__glDeleteProgram@4 referenced in function _Init
2>Hello_Triangle.obj : error LNK2019: unresolved external symbol __imp__glGetProgramInfoLog@16 referenced in function _Init
2>Hello_Triangle.obj : error LNK2019: unresolved external symbol __imp__glGetProgramiv@12 referenced in function _Init
2>Hello_Triangle.obj : error LNK2019: unresolved external symbol __imp__glLinkProgram@4 referenced in function _Init
2>Hello_Triangle.obj : error LNK2019: unresolved external symbol __imp__glAttachShader@8 referenced in function _Init
2>Hello_Triangle.obj : error LNK2019: unresolved external symbol __imp__glCreateProgram@0 referenced in function _Init
2>Hello_Triangle.obj : error LNK2019: unresolved external symbol __imp__glDrawArrays@12 referenced in function _Draw
2>Hello_Triangle.obj : error LNK2019: unresolved external symbol __imp__glEnableVertexAttribArray@4 referenced in function _Draw
2>Hello_Triangle.obj : error LNK2019: unresolved external symbol __imp__glVertexAttribPointer@24 referenced in function _Draw
2>Hello_Triangle.obj : error LNK2019: unresolved external symbol __imp__glUseProgram@4 referenced in function _Draw
2>Hello_Triangle.obj : error LNK2019: unresolved external symbol __imp__glClear@4 referenced in function _Draw
2>Hello_Triangle.obj : error LNK2019: unresolved external symbol __imp__glViewport@16 referenced in function _Draw
2>Common.lib(esUtil.obj) : error LNK2019: unresolved external symbol __imp__eglQueryString@8 referenced in function _GetContextRenderableType
2>Common.lib(esUtil.obj) : error LNK2019: unresolved external symbol __imp__eglMakeCurrent@16 referenced in function _esCreateWindow
2>Common.lib(esUtil.obj) : error LNK2019: unresolved external symbol __imp__eglCreateContext@16 referenced in function _esCreateWindow
2>Common.lib(esUtil.obj) : error LNK2019: unresolved external symbol __imp__eglCreateWindowSurface@16 referenced in function _esCreateWindow
2>Common.lib(esUtil.obj) : error LNK2019: unresolved external symbol __imp__eglChooseConfig@20 referenced in function _esCreateWindow
2>Common.lib(esUtil.obj) : error LNK2019: unresolved external symbol __imp__eglInitialize@12 referenced in function _esCreateWindow
2>Common.lib(esUtil.obj) : error LNK2019: unresolved external symbol __imp__eglGetDisplay@4 referenced in function _esCreateWindow
2>Common.lib(esUtil_win32.obj) : error LNK2019: unresolved external symbol __imp__eglSwapBuffers@8 referenced in function _ESWindowProc@16

MapBufferRange

Book, page 156, glMapBufferRange()
There are two mistakes:

  • GL_MAP_INVALIDATE_BUFFER_BIT: "This flag can only be used in combination with GL_MAP_READ_BIT" instead of "This flag may not be used in combination with MAP_READ_BIT" (from the spec ES 3.1, page 55)
  • GL_MAP_FLUSH_EXPLICIT_BIT: "This flag cannot be used in combination with GL_MAP_WRITE_BIT" instead of "This flag may only be used in conjunction with MAP_WRITE_BIT." (from the spec ES 3.1, page 55)

How to compile source

The note say“Instructions for building for each platform are provided in Chapter 16, "OpenGL ES Platforms".” But where is the Chapter 16, Ican't find that. And I open the project at AndroidStudio, IDE warning a lot of error.
So the problem is AndroidStuido can't drectly product apk.
How to do that.

Help! LNK2019,unrevoled external symbol _esMain referenced in function _main.

I use powerVRSDK3.5 to set up my visual studio environment.
all the header files and libs are include .
I copy "esUtils.h" and "esUtils_win32.h" to the folder of Include .
all libs are set correctly ,"libEGL.lib","libGLESv2.lib","Common.lib" .
I set subSystem as console .
but here comes the problem as mentioned in the title.
and it shows that problem occurs in "esUtil_win32.obj".

please help me to solve this problem,Even google can not solve this problem.

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.