查看: 1748|回复: 1

iOS 上使用 GLES2.0 例子出错:VERTEX glCompileShader "" FAILED

[复制链接]

该用户从未签到

发表于 2014-11-7 17:23:02 | 显示全部楼层 |阅读模式
本帖最后由 skylook 于 2014-11-7 17:27 编辑

Hi,

我使用 OSG 3.2.1 版本编译 (with OSG_GLES2_AVAILABLE:BOOL=ON ) ,把它自己的例子程序运行 example_osgViewerIPhone, 出现下面的错误:


  1. VERTEX glCompileShader "" FAILED
  2. VERTEX Shader "" infolog:
  3. ERROR: 0:6: Use of undeclared identifier 'gl_Vertex'
  4. ERROR: 0:7: Use of undeclared identifier 'gl_FrontColor'

  5. FRAGMENT glCompileShader "" FAILED
  6. FRAGMENT Shader "" infolog:
  7. ERROR: 0:4: 'vec4' : declaration must include a precision qualifier for type
  8. ERROR: 0:5: Use of undeclared identifier 'base'
  9. ERROR: 0:6: Use of undeclared identifier 'color'
  10. ERROR: 0:6: Use of undeclared identifier 'gl_Color'
  11. ERROR: 0:7: Use of undeclared identifier 'color'

  12. glLinkProgram "" FAILED
  13. Program "" infolog:
  14. ERROR: One or more attached shaders not successfully compiled
复制代码


我这里生成的配置文件如下:

  1. /* -*-c++-*- OpenSceneGraph - Copyright (C) 2008-2009 Robert Osfield
  2. *
  3. * This library is open source and may be redistributed and/or modified under
  4. * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
  5. * (at your option) any later version.  The full license is in LICENSE file
  6. * included with this distribution, and on the openscenegraph.org website.
  7. *
  8. * This library is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11. * OpenSceneGraph Public License for more details.
  12. */

  13. /****************************************************************************
  14. * THIS FILE IS AUTOGENERATED BY CMAKE. DO NOT EDIT!
  15. ****************************************************************************/

  16. /* Changes to the configuration reflected here can be made with ccmake on
  17. * unix or with cmake-gui on windows. Alternatively you can use cmake's -D
  18. * or -P switches to set some configuration values at cmake configuration time.
  19. */

  20. #ifndef OSG_CONFIG
  21. #define OSG_CONFIG 1

  22. /* #undef OSG_NOTIFY_DISABLED */
  23. /* #undef OSG_USE_FLOAT_MATRIX */
  24. /* #undef OSG_USE_FLOAT_PLANE */
  25. #define OSG_USE_FLOAT_BOUNDINGSPHERE
  26. #define OSG_USE_FLOAT_BOUNDINGBOX
  27. #define OSG_USE_REF_PTR_IMPLICIT_OUTPUT_CONVERSION
  28. /* #undef OSG_USE_UTF8_FILENAME */
  29. #define OSG_DISABLE_MSVC_WARNINGS

  30. /* #undef OSG_GL1_AVAILABLE */
  31. /* #undef OSG_GL2_AVAILABLE */
  32. /* #undef OSG_GL3_AVAILABLE */
  33. /* #undef OSG_GLES1_AVAILABLE */
  34. #define OSG_GLES2_AVAILABLE
  35. /* #undef OSG_GL_LIBRARY_STATIC */
  36. /* #undef OSG_GL_DISPLAYLISTS_AVAILABLE */
  37. /* #undef OSG_GL_MATRICES_AVAILABLE */
  38. /* #undef OSG_GL_VERTEX_FUNCS_AVAILABLE */
  39. /* #undef OSG_GL_VERTEX_ARRAY_FUNCS_AVAILABLE */
  40. /* #undef OSG_GL_FIXED_FUNCTION_AVAILABLE */

  41. #endif
复制代码


其实我想完成的功能很简单,就是在ios上把一个osg格式的动画播放出来(参见附件 young.osg.zip (709.42 KB, 下载次数: 14)

该用户从未签到

 楼主| 发表于 2014-11-11 14:36:43 | 显示全部楼层
自我解答下这个问题,一个可以绘制素材的 shader 如下:
  1.     static const char gVertexShader1[] =
  2.     "varying vec2 v_texCoord;                                         \n"
  3.     "void main() {                                                          \n"
  4.     "    gl_Position  = gl_ModelViewProjectionMatrix * gl_Vertex;           \n"
  5.     "         v_texCoord   = gl_MultiTexCoord0.xy;                                                        \n"
  6.     "}                                                                  \n";
  7.    
  8.     static const char gFragmentShader1[] =
  9.     "varying  mediump vec2 v_texCoord;                                                                  \n"
  10.     "uniform sampler2D sam;                                                                                                        \n"
  11.     "void main() {                                                                                                                        \n"
  12.     "gl_FragColor = texture2D(sam, v_texCoord);                                                                        \n"
  13.     "}                                                                      \n";
  14.     osg::Shader* vShader = new osg::Shader( osg::Shader::VERTEX, gVertexShader1 );
  15.     osg::Shader* fShader = new osg::Shader( osg::Shader::FRAGMENT, gFragmentShader1 );
  16.    
  17.     osg::Program* program = new osg::Program;
  18.     program->addShader( vShader );
  19.     program->addShader( fShader );
  20.     stateSet->setAttribute( program );
复制代码

参照这一方法就可以了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表