- 2022.03.28 Monday
- スポンサーサイト
-
一定期間更新がないため広告を表示しています
- | スポンサードリンク | - | | - | - | pookmark |
- 2016.12.08 Thursday
- metal-without-xcode をやってみた。
-
n-yoda's blog さんの Metal Shading Language コンパイラの使い方
metal-without-xcode をやってみた。
パスを通した。
~/.bash_profile
export PATH=$PATH:/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/usr/bin
が書いてあればいい。
クローンしてー
noboru-no-MacBook-Pro:~ whaison$ cd /works/metal-without-xcode
noboru-no-MacBook-Pro:metal-without-xcode whaison$ metal
metal: error: no input files
noboru-no-MacBook-Pro:metal-without-xcode whaison$ make shaders.metallib
metallib -o shaders.metallib shaders.metal-ar
metallib: creating metal-library shaders.metallib
noboru-no-MacBook-Pro:metal-without-xcode whaison$noboru-no-MacBook-Pro:metal-without-xcode whaison$ make
clang++ -std=c++11 -framework Cocoa -framework Metal -framework MetalKit -fobjc-arc main.mm -o main
2016-11-25 23:09:25.559 xcodebuild[16710:294680] [MT] PluginLoading: Required plug-in compatibility UUID DA4FDFD8-C509-4D8B-8B55-84A7B66AE701 for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/Unity4XC.xcplugin' not present in DVTPlugInCompatibilityUUIDs
2016-11-25 23:09:25.562 xcodebuild[16710:294680] Failed to load plugin at: /Users/whaison/Library/Application Support/Developer/Shared/Xcode/Plug-ins/Unity4XC.xcplugin, skipping. Reason for failure: *** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0]
main.mm:33:68: warning: 'NSTitledWindowMask' is deprecated: first deprecated in
macOS 10.12 [-Wdeprecated-declarations]
...initWithContentRect:frame styleMask:NSTitledWindowMaskこのマスクは古いよってエラー
^~~~~~~~~~~~~~~~~~
NSWindowStyleMaskTitled
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSWindow.h:953:32: note:
'NSTitledWindowMask' has been explicitly marked deprecated here
static const NSWindowStyleMask NSTitledWindowMask API_DEPRECATED_WITH_RE...
^
1 warning generated.
noboru-no-MacBook-Pro:metal-without-xcode whaison$noboru-no-MacBook-Pro:metal-without-xcode whaison$ make
clang++ -std=c++11 -framework Cocoa -framework Metal -framework MetalKit -fobjc-arc main.mm -o main
noboru-no-MacBook-Pro:metal-without-xcode whaison$ make
make: Nothing to be done for `default'.Nothing to be done for "defalt"
makeが出しているメッセージだと思います。make defaltを実行しようとしたんだけど,もうやるべきことは全部やっちゃってて,もう`defaltl'のために実行することは何も残ってないですよ,って話。
すでにMakefileで指定された 依存関係をコンパイルして main ファイルが生成されてるよっていみ。
ダブルクリックしちゃったらこんなんなる
Last login: Sat Nov 26 01:39:31 on ttys002
noboru-no-MacBook-Pro:~ whaison$ /works/metal-without-xcode/main ; exit;ルートディレクトリで実行しちゃってるから
2016-11-26 01:42:37.832 main[25304:431196] main()
2016-11-26 01:42:37.832 main[25304:431196] autoreleasepool()
2016-11-26 01:42:37.895 main[25304:431196] initWithFrame()
2016-11-26 01:42:37.913 main[25304:431196] setup()
2016-11-26 01:42:37.913 main[25304:431196] Failed to load (shaders.metallib)library. error ===== Error Domain=MTLLibraryErrorDomain Code=6 "library not found" UserInfo={NSLocalizedDescription=library not found}ルートディレクトリで実行しちゃってるからそりゃshaders.metallibロードできないよね。。。
logout
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.[プロセスが完了しました]
noboru-no-MacBook-Pro:~ whaison$ cd /works/metal-without-xcode
noboru-no-MacBook-Pro:metal-without-xcode whaison$ /works/metal-without-xcode/main ; exit;
2016-11-26 01:37:07.195 main[25022:426509] main()
2016-11-26 01:37:07.196 main[25022:426509] autoreleasepool()
2016-11-26 01:37:07.254 main[25022:426509] initWithFrame()
2016-11-26 01:37:07.262 main[25022:426509] setup()
2016-11-26 01:37:07.263 main[25022:426509] setup().Loaded....shaders.metallib
logout
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.[プロセスが完了しました]
やっとでた。
パスがめんどくさいのでsh main_run.shで実行できるようにshell書いといた。
noboru-no-MacBook-Pro:metal-without-xcode whaison$ sh main_run.sh
/works/metal-without-xcode
2016-11-26 02:20:43.126 main[27034:465653] main()
2016-11-26 02:20:43.126 main[27034:465653] autoreleasepool()
2016-11-26 02:20:43.198 main[27034:465653] initWithFrame()
2016-11-26 02:20:43.213 main[27034:465653] setup()
2016-11-26 02:20:43.213 main[27034:465653] setup().Loaded....shaders.metallibhttps://github.com/whaison/metal-without-xcode.git
です。
- | whaison | OpenGL,OpenGLES,glsl,DirectX,hlsl,webGL,metal,vulkan | 13:00 | comments(0) | - | pookmark |
- 2016.11.25 Friday
- Sublime Text 3 for ios Metal Shading Langage MSL metalGL highlighter
-
here
~/Library/Application Support/Sublime Text 3/Packages/User/sublime-shaders/metal/
clone in to ~/Library/Application Support/Sublime Text 3/Packages/User/sublime-shaders
https://github.com/whaison/sublime-shaders.git
を入れれば
metal のほか fork元のnoctさんの .glsl .hlsl .cg なんかも highlight される。
大それたことをやってるわけじゃないです。。
n-yoda's blog さまから引用させていただきました。
http://ny.hateblo.jp/entry/2015/10/17/182307 から引用させていただきました。:
「Metal and C++11 に書いてあるように、Metalのシェーディング言語はほぼC++11なので実態はLLVM/Clangです。」
みたいなので
C++ハイライト設定に.metal足しただけです。
そしてそんなにsublime ユーザーでもないかもっていう。
- | whaison | OpenGL,OpenGLES,glsl,DirectX,hlsl,webGL,metal,vulkan | 22:26 | comments(0) | - | pookmark |
- 2016.10.27 Thursday
- Mobile-Motion-Particles-Alpha Blended-VColorV2.shader
-
Mobile-Motion-Particles-Alpha Blended-VColorV2.shader
- | whaison | OpenGL,OpenGLES,glsl,DirectX,hlsl,webGL,metal,vulkan | 15:18 | comments(0) | - | pookmark |
- 2016.10.27 Thursday
- MayaVertexColorAlpha.shader
-
MayaVertexColorAlpha.shader
Shader warning in Output value 'vert' is not completely initialized at line 60 (on d3d11) Compiling Vertex program Platform defines: UNITY_ENABLE_REFLECTION_BUFFERS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING
bugFixed http://answers.unity3d.com/questions/754151/vert-output-parameter-o-not-completely-initialized.html
UNITY_INITIALIZE_OUTPUT(v2f, o);
Maya ColorUnity Color
- | whaison | OpenGL,OpenGLES,glsl,DirectX,hlsl,webGL,metal,vulkan | 15:04 | comments(0) | - | pookmark |
- 2016.10.03 Monday
- ToonShader
-
Toon shader Vertex shader -----------------------------
// // ToonShader.vsh //
// // ToonShader.fsh //
- | whaison | OpenGL,OpenGLES,glsl,DirectX,hlsl,webGL,metal,vulkan | 22:22 | comments(0) | - | pookmark |
- 2016.06.12 Sunday
- 3D バッファ 一覧 OpenGL WebGL Unity
-
バッファ一覧
3Dでバッファ 一覧
(OpenGL) Buffer Object のwikiから引用すると
(一旦 日本語解釈 間違ってるかも。あとで聞いてみよ)
https://www.opengl.org/wiki/Buffer_Object
OpenGL Object
- Buffer Objects バッファそのもの
- Buffer Object Streaming ストリームバッファ
- Vertex Buffer Objects 頂点バッファ
- Pixel Buffer Objects ピクセルバッファ
- Shader Storage Buffer Objects HDバッファ
- Uniform Buffer Objects グローバル
- Atomic Counters
- Vertex Array Objects 頂点配列バッファ
- Textures テクスチャバッファ
- Sampler Objects 2Dテクスチャーをサンプルする型
- Image formats 画像フォーマット
- Pixel transfer operations
- Cubemap Textures cubemapバッファ
- Array Textures テクスチャ配列バッファ
- Multisample Textures
- Rectangle Textures 四角いテクスチャバッファ
- 3D Textures 3D テクスチャバッファ
- Buffer Textures テクスチャバッファ
- Asynchronous query objects 非同期クエリオブジェクト
- Framebuffer Objects フレームバッファ
- Default Framebuffer デフォルトフレームバッファ
- Renderbuffer Objects レンダリングバッファ
- Unconventional objects:
- Sync Objects シンクオブジェクト
- Shader and program objects シェーダの設定が詰まったプログラムオブジェクト
Unityでは?
Vertex Buffer Object VBO頂点データを扱う頂点バッファ これに入れると頂点がGPU に乗る
Index Buffer Object IBOは 頂点を結ぶ順番 のインデックス番号をいれたバッファ (PrimitiveType:つなぎ方と一緒に使う)
vertex0(x,y,z), vertex1(x,y,z),vertex2(x,y,z),vertex3(x,y,z) をどうつなぐかPrimitiveType
PrimitiveType :頂点のつなぎ方 3 種類ある。 ※Unityでは3D ObjectがPrimitiveTypeっていう名前。Cubeとかあんま使わない。
Stencil buffer そのほかステンシルバッファとはよく聞くマスクに使うやつ。直訳だと型板 版画みたいな感じ 軽いけど2D的
Depths baffer 深度を扱う深度バッファ、z座標の重なり順管理
unityも同様unityも同様
frame buffer フレームバッファとは?バッファを統括するバッファであり、プログラムとスクリーンとの間を取り持つ仲介役unityも同様
RendrerTextureはレンダリングされたテクスチャon unity
Grabpass で前のパスをとっとける
http://docs.unity3d.com/ja/current/Manual/SL-GrabPass.html
on unity
- Buffer Objects バッファそのもの
- | whaison | OpenGL,OpenGLES,glsl,DirectX,hlsl,webGL,metal,vulkan | 21:03 | comments(0) | - | pookmark |
- 2016.05.29 Sunday
- GLSL でなんかshaderが書けるゴリゴリのios7アプリ Gryphos GmbH「Shaderific - OpenGL ES shader development with GLSL」 https://appsto.re/jp/JyVBE.i
-
GLSL でなんかshaderが書けるゴリゴリのios7アプリ Gryphos GmbH「Shaderific - OpenGL ES shader development with GLSL」 https://appsto.re/jp/JyVBE.i
きいろ
シェーダ名変えてDone saveで右上で再生
できた - | whaison | OpenGL,OpenGLES,glsl,DirectX,hlsl,webGL,metal,vulkan | 14:36 | comments(0) | - | pookmark |
- 2015.10.26 Monday
- Mac OS X 10.10.4でOpenGLのプログラムを始める方法
-
Mac OS X 10.10.4
Xcode_7_beta_4.
OS X >Applacation >CommandLineTool
適当に設定
Build Phasesで Link Binary With Librariesの+を押す
OpenGLと入力すると出てくる。
GLUTと入力すると出てくる。
main.cにOpenGLとGLUTのヘッダを付け加える
OpenGLとGLUTのヘッダは
#include <OpenGL/gl.h>
#include <GLUT/glut.h>
となる。ここはWindowsと異なるので注意。
------------------------------------------------------------//
// main.c
// opengl001
//
// Created by whaison on 2015/10/26.
// Copyright © 2015年 whaison. All rights reserved.
//
#include <OpenGL/gl.h>
#include <GLUT/glut.h>
#include <stdio.h>
int main(int argc, const char * argv[]) {
// insert code here...
printf("Hello, World!¥n");
return 0;
}
-----------------------------------------------------------
ヘッダを付け加えるのは別にmain.cじゃなくてもいいと思うけど、
(例えばmain.hというファイルを作ってそこに書く)
僕はC言語は詳しくないのでこうしています。
これで少なくともコンパイルはできるはずです。
コンソールに「Hello, World!」と表示されるはずです。
これでうまくコンパイルされるなら、
main.cの中で自由にGLUTとOpenGLのライブラリが使えるはずです。
OpenGLのプログラミングに関しては、
例えば以下のページを参考にしてみてください。
GLUTによる「手抜き」OpenGL入門
参考
http://nozawashinichi.sakura.ne.jp/fs/2009/07/macopengl.html
だけじゃつまらないので、ウィンドウを出してみました。
//// main.c
// opengl002
//
// Created by whaison on 2015/10/26.
// Copyright (c) 2015年 whaison. All rights reserved.
//
#include <OpenGL/gl.h>
#include <GLUT/glut.h>
void display(void)
{
}
int main(int argc, const char * argv[]) {
// insert code here...
printf("Hello, World!¥n");
glutInit(&argc, argv);
glutCreateWindow(argv[0]);
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
こんなウィンドウがでました!。
ウィンドウ塗りつぶし 太字の部分を追加して。。。#include <GL/glut.h> void display(void) { glClear(GL_COLOR_BUFFER_BIT); glFlush(); } void init(void) { glClearColor(0.0, 0.0, 1.0, 1.0); } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA); glutCreateWindow(argv[0]); glutDisplayFunc(display); init(); glutMainLoop(); return 0; }
ウィンドウ塗りつぶしました。
- | whaison | OpenGL,OpenGLES,glsl,DirectX,hlsl,webGL,metal,vulkan | 17:55 | comments(0) | - | pookmark |
- 2015.07.18 Saturday
- OpenGL でとりあえず。なんかつくってみる。001-iOS 8.1 @ OpenGL ES 3.0ハローワールド
-
OpenGL でとりあえず。なんかつくってみる。001-iOS 8.1 @ OpenGL ES 3.0ハローワールド
なんかこんなん よく出るよねー
実機でそりゃー
Objective-C h プロパティ
------------------------------------//
// RMViewController.h
// test
//
// Created by ramemiso on 2013/09/23.
// Copyright (c) 2013年 ramemiso. All rights reserved.
//
#import <UIKit/UIKit.h>
#import <GLKit/GLKit.h>
@interface RMViewController : GLKViewController
@end
------------------------------------
Objective-C m メインコード
-------------------------------------//
// RMViewController.m
// test
//
// Created by ramemiso on 2013/09/23.
// Copyright (c) 2013年 ramemiso. All rights reserved.
//
#import "RMViewController.h"
#import <OpenGLES/ES3/gl.h>
#import <OpenGLES/ES3/glext.h>
#define BUFFER_OFFSET(i) ((char *)NULL + (i))
// Uniform index.
enum
{
UNIFORM_MODELVIEWPROJECTION_MATRIX,
UNIFORM_NORMAL_MATRIX,
NUM_UNIFORMS
};
GLint uniforms[NUM_UNIFORMS];
enum
{
ATTRIB_POSITION,
ATTRIB_NORMAL,
};
GLfloat gCubeVertexData[216] =
{
// Data layout for each line below is:
// positionX, positionY, positionZ, normalX, normalY, normalZ,
0.5f, -0.5f, -0.5f, 1.0f, 0.0f, 0.0f,
0.5f, 0.5f, -0.5f, 1.0f, 0.0f, 0.0f,
0.5f, -0.5f, 0.5f, 1.0f, 0.0f, 0.0f,
0.5f, -0.5f, 0.5f, 1.0f, 0.0f, 0.0f,
0.5f, 0.5f, -0.5f, 1.0f, 0.0f, 0.0f,
0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 0.0f,
0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 0.0f,
-0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 0.0f,
0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 0.0f,
0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 0.0f,
-0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 0.0f,
-0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 0.0f,
-0.5f, 0.5f, -0.5f, -1.0f, 0.0f, 0.0f,
-0.5f, -0.5f, -0.5f, -1.0f, 0.0f, 0.0f,
-0.5f, 0.5f, 0.5f, -1.0f, 0.0f, 0.0f,
-0.5f, 0.5f, 0.5f, -1.0f, 0.0f, 0.0f,
-0.5f, -0.5f, -0.5f, -1.0f, 0.0f, 0.0f,
-0.5f, -0.5f, 0.5f, -1.0f, 0.0f, 0.0f,
-0.5f, -0.5f, -0.5f, 0.0f, -1.0f, 0.0f,
0.5f, -0.5f, -0.5f, 0.0f, -1.0f, 0.0f,
-0.5f, -0.5f, 0.5f, 0.0f, -1.0f, 0.0f,
-0.5f, -0.5f, 0.5f, 0.0f, -1.0f, 0.0f,
0.5f, -0.5f, -0.5f, 0.0f, -1.0f, 0.0f,
0.5f, -0.5f, 0.5f, 0.0f, -1.0f, 0.0f,
0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 1.0f,
-0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 1.0f,
0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 1.0f,
0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 1.0f,
-0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 1.0f,
-0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 1.0f,
0.5f, -0.5f, -0.5f, 0.0f, 0.0f, -1.0f,
-0.5f, -0.5f, -0.5f, 0.0f, 0.0f, -1.0f,
0.5f, 0.5f, -0.5f, 0.0f, 0.0f, -1.0f,
0.5f, 0.5f, -0.5f, 0.0f, 0.0f, -1.0f,
-0.5f, -0.5f, -0.5f, 0.0f, 0.0f, -1.0f,
-0.5f, 0.5f, -0.5f, 0.0f, 0.0f, -1.0f
};
@interface RMViewController () {
GLuint _program;
GLKMatrix4 _modelViewProjectionMatrix;
GLKMatrix3 _normalMatrix;
float _rotation;
GLuint _vertexArray;
GLuint _vertexBuffer;
}
@property (strong, nonatomic) EAGLContext *context;
- (void)setupGL;
- (void)tearDownGL;
- (BOOL)loadShaders;
- (BOOL)compileShader:(GLuint *)shader type:(GLenum)type file:(NSString *)file;
- (BOOL)linkProgram:(GLuint)prog;
- (BOOL)validateProgram:(GLuint)prog;
@end
@implementation RMViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3];
if (!self.context) {
NSLog(@"Failed to create ES context");
}
GLKView *view = (GLKView *)self.view;
view.context = self.context;
view.drawableDepthFormat = GLKViewDrawableDepthFormat24;
[self setupGL];
}
- (void)dealloc
{
[self tearDownGL];
if ([EAGLContext currentContext] == self.context) {
[EAGLContext setCurrentContext:nil];
}
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
if ([self isViewLoaded] && ([[self view] window] == nil)) {
self.view = nil;
[self tearDownGL];
if ([EAGLContext currentContext] == self.context) {
[EAGLContext setCurrentContext:nil];
}
self.context = nil;
}
// Dispose of any resources that can be recreated.
}
- (void)setupGL
{
[EAGLContext setCurrentContext:self.context];
[self loadShaders];
glEnable(GL_DEPTH_TEST);
glGenVertexArrays(1, &_vertexArray);
glBindVertexArray(_vertexArray);
glGenBuffers(1, &_vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(gCubeVertexData), gCubeVertexData, GL_STATIC_DRAW);
glEnableVertexAttribArray(ATTRIB_POSITION);
glVertexAttribPointer(ATTRIB_POSITION, 3, GL_FLOAT, GL_FALSE, 24, BUFFER_OFFSET(0));
glEnableVertexAttribArray(ATTRIB_NORMAL);
glVertexAttribPointer(ATTRIB_NORMAL, 3, GL_FLOAT, GL_FALSE, 24, BUFFER_OFFSET(12));
glBindVertexArray(0);
}
- (void)tearDownGL
{
[EAGLContext setCurrentContext:self.context];
glDeleteBuffers(1, &_vertexBuffer);
glDeleteVertexArrays(1, &_vertexArray);
if (_program) {
glDeleteProgram(_program);
_program = 0;
}
}
#pragma mark - GLKView and GLKViewController delegate methods
- (void)update
{
float aspect = fabsf(self.view.bounds.size.width / self.view.bounds.size.height);
GLKMatrix4 projectionMatrix = GLKMatrix4MakePerspective(GLKMathDegreesToRadians(65.0f), aspect, 0.1f, 100.0f);
GLKMatrix4 baseModelViewMatrix = GLKMatrix4MakeTranslation(0.0f, 0.0f, -4.0f);
baseModelViewMatrix = GLKMatrix4Rotate(baseModelViewMatrix, _rotation, 0.0f, 1.0f, 0.0f);
GLKMatrix4 modelViewMatrix = GLKMatrix4MakeTranslation(0.0f, 0.0f, 1.5f);
modelViewMatrix = GLKMatrix4Rotate(modelViewMatrix, _rotation, 1.0f, 1.0f, 1.0f);
modelViewMatrix = GLKMatrix4Multiply(baseModelViewMatrix, modelViewMatrix);
_normalMatrix = GLKMatrix3InvertAndTranspose(GLKMatrix4GetMatrix3(modelViewMatrix), NULL);
_modelViewProjectionMatrix = GLKMatrix4Multiply(projectionMatrix, modelViewMatrix);
_rotation += self.timeSinceLastUpdate * 0.5f;
}
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
{
glClearColor(0.65f, 0.65f, 0.65f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBindVertexArray(_vertexArray);
glUseProgram(_program);
glUniformMatrix4fv(uniforms[UNIFORM_MODELVIEWPROJECTION_MATRIX], 1, 0, _modelViewProjectionMatrix.m);
glUniformMatrix3fv(uniforms[UNIFORM_NORMAL_MATRIX], 1, 0, _normalMatrix.m);
glDrawArrays(GL_TRIANGLES, 0, 36);
}
#pragma mark - OpenGL ES 2 shader compilation
- (BOOL)loadShaders
{
GLuint vertShader, fragShader;
NSString *vertShaderPathname, *fragShaderPathname;
// Create shader program.
_program = glCreateProgram();
// Create and compile vertex shader.
vertShaderPathname = [[NSBundle mainBundle] pathForResource:@"Shader" ofType:@"vsh"];
if (![self compileShader:&vertShader type:GL_VERTEX_SHADER file:vertShaderPathname]) {
NSLog(@"Failed to compile vertex shader");
return NO;
}
// Create and compile fragment shader.
fragShaderPathname = [[NSBundle mainBundle] pathForResource:@"Shader" ofType:@"fsh"];
if (![self compileShader:&fragShader type:GL_FRAGMENT_SHADER file:fragShaderPathname]) {
NSLog(@"Failed to compile fragment shader");
return NO;
}
// Attach vertex shader to program.
glAttachShader(_program, vertShader);
// Attach fragment shader to program.
glAttachShader(_program, fragShader);
// Link program.
if (![self linkProgram:_program]) {
NSLog(@"Failed to link program: %d", _program);
if (vertShader) {
glDeleteShader(vertShader);
vertShader = 0;
}
if (fragShader) {
glDeleteShader(fragShader);
fragShader = 0;
}
if (_program) {
glDeleteProgram(_program);
_program = 0;
}
return NO;
}
// Get uniform locations.
uniforms[UNIFORM_MODELVIEWPROJECTION_MATRIX] = glGetUniformLocation(_program, "modelViewProjectionMatrix");
uniforms[UNIFORM_NORMAL_MATRIX] = glGetUniformLocation(_program, "normalMatrix");
// Release vertex and fragment shaders.
if (vertShader) {
glDetachShader(_program, vertShader);
glDeleteShader(vertShader);
}
if (fragShader) {
glDetachShader(_program, fragShader);
glDeleteShader(fragShader);
}
return YES;
}
- (BOOL)compileShader:(GLuint *)shader type:(GLenum)type file:(NSString *)file
{
GLint status;
const GLchar *source;
source = (GLchar *)[[NSString stringWithContentsOfFile:file encoding:NSUTF8StringEncoding error:nil] UTF8String];
if (!source) {
NSLog(@"Failed to load vertex shader");
return NO;
}
*shader = glCreateShader(type);
glShaderSource(*shader, 1, &source, NULL);
glCompileShader(*shader);
#if defined(DEBUG)
GLint logLength;
glGetShaderiv(*shader, GL_INFO_LOG_LENGTH, &logLength);
if (logLength > 0) {
GLchar *log = (GLchar *)malloc(logLength);
glGetShaderInfoLog(*shader, logLength, &logLength, log);
NSLog(@"Shader compile log:¥n%s", log);
free(log);
}
#endif
glGetShaderiv(*shader, GL_COMPILE_STATUS, &status);
if (status == 0) {
glDeleteShader(*shader);
return NO;
}
return YES;
}
- (BOOL)linkProgram:(GLuint)prog
{
GLint status;
glLinkProgram(prog);
#if defined(DEBUG)
GLint logLength;
glGetProgramiv(prog, GL_INFO_LOG_LENGTH, &logLength);
if (logLength > 0) {
GLchar *log = (GLchar *)malloc(logLength);
glGetProgramInfoLog(prog, logLength, &logLength, log);
NSLog(@"Program link log:¥n%s", log);
free(log);
}
#endif
glGetProgramiv(prog, GL_LINK_STATUS, &status);
if (status == 0) {
return NO;
}
return YES;
}
- (BOOL)validateProgram:(GLuint)prog
{
GLint logLength, status;
glValidateProgram(prog);
glGetProgramiv(prog, GL_INFO_LOG_LENGTH, &logLength);
if (logLength > 0) {
GLchar *log = (GLchar *)malloc(logLength);
glGetProgramInfoLog(prog, logLength, &logLength, log);
NSLog(@"Program validate log:¥n%s", log);
free(log);
}
glGetProgramiv(prog, GL_VALIDATE_STATUS, &status);
if (status == 0) {
return NO;
}
return YES;
}
@end
-------------------------------------
参考
http://ramemiso.hateblo.jp/entry/2013/09/23/175127 - | whaison | OpenGL,OpenGLES,glsl,DirectX,hlsl,webGL,metal,vulkan | 19:22 | comments(0) | - | pookmark |
- 2015.07.18 Saturday
- OpenGL Insights 日本語版 ボーンデジタル Patrick Cozzi & Christophe Riccio(書籍)で読んだこと
-
評価:
Patrick Cozzi,Christophe Riccio
ボーンデジタル
¥ 14,040
(2013-03-23)
コメント:この本 技術書にしては 表紙がぶ厚くてハードカバー でフルカラーで13000円と、笑うぐらい高く そして重い。だけどテクノロジー的に突っ込みにくいと思っていたOpen GL関連にとっては読みやすさ抜群だと思う。にとても読みやすい。
Amazonランキング: 554353位
この本 技術書にしてはめっちゃ 表紙がぶ厚くてハードカバー でフルカラーで 13000円と、笑うぐらい高く そして重い。
関連URL
http://www.openglinsights.com/
http://www.borndigital.co.jp/book/2783.html
http://www.borndigital.co.jp/book/support/3736.html
【目次】
発見
1 コンピュータ グラフィックスをシェーダ ベースのOpenGLから教える
2 デプリケーション後のOpenGLに学生を移行させる
3 OpenGL開発者のためのWebGL
4 モバイル アプリのWebGLへの移植
5 GLSLシェーダ インターフェイス
6 テッセレーション シェーダ入門
7 GLSLによる手続き型テクスチャ
8 OpenGLとOpenGL ESに基づくOpenGL SCエミュレーション
9 複数のGPUによるグラフィックスと計算のミックス
レンダリング テクニック
10 GPUテッセレーション:まだカバーすべき地形のLODがある
11 シェーダ ベースの押し出しを使ってアンチエイリアスするボリュームのある直線
12 距離場による2D形状のレンダリング
13 WebGLの効率的なテキスト レンダリング
14 階層化テクスチャ レンダリング パイプライン
15 ボケ レンダリングによる被写界深度
16 影プロクシ
パイプラインを曲げる
17 トランスフォーム フィードバックを使うリアルタイムな物理に基づく変形
18 GPU上の階層深度カリングと境界ボックスの管理
19 階層化レンダリングで大量の影を投じるライト
20 効率的な積層フラグメント バッファ テクニック
21 プログラマブル頂点プル
22 GPUのハードウェア ラスタライザを使ったオクツリーに基づく疎なボクセル化
性能
23 タイル ベースのアーキテクチャでの性能チューニング
24 モバイル vs. デスクトップのOpenGL性能を探る
25 ドライバの呼び出しを減らして性能を改善する
26 複数の頂点配列のインデックス化
27 NVIDIA Quadro上のマルチGPUレンダリング
転送
28 非同期バッファ転送
29 Fermiの非同期テクスチャ転送
30 WebGLモデル:エンドツーエンド
31 リアルタイム テクスチャ圧縮によるゲーム中のビデオ キャプチャー
32 OpenGLフレンドリーなジオメトリ ファイル フォーマット、そのMayaエクスポーター
デバッグとプロファイリング
33 ARB_debug_output:絶望的な開発者のためのOpenGLの解決策
34 OpenGLタイマー クエリ
35 リアルタイム プロファイリング ツール
36 ブラウザ グラフィックスの分析と最適化
37 パフォーマンス ステート トラッキング
38 グラフィックス メモリ使用のモニタリング
ソフトウェア設計
39 ANGLEプロジェクト:Direct3D上のOpenGL ES 2.0実装
40 SceneJS:WebGLベースのシーン グラフ エンジン
41 SpiderGLの特徴と設計選択
42 Web上でのマルチモーダル インタラクティブ シミュレーション
43 OpenGL とOpenGL ESの使用へのサブセット アプローチ
44 ビルド症候群
- | whaison | OpenGL,OpenGLES,glsl,DirectX,hlsl,webGL,metal,vulkan | 17:25 | comments(0) | - | pookmark |