最新のOPENGL環境はどうなっているか?

Windows環境においては、どうもglutの開発が停止してfreeGlutというものに移行しているらしい。現在の最新バージョンは3.00.今が2016年なので1年前にメジャーアップデートしたらしい。ちょうどいいね。

Freeglut 3.0.0[Released: 7 March 2015]
Freeglut 2.8.1[Released: 5 April 2013]
Freeglut 2.8.0[Released: 2 January 2012]
Freeglut 2.6.0[Released: 27 November 2009]
Freeglut 2.4.0[Released: 9 June 2005]
Freeglut 2.2.0[Released: 12 December 2003]
Freeglut 2.0.1[Released: 23 October 2003]

Libファイルを用意する

公式からリンクをたどるとhttp://www.transmissionzero.co.uk/software/freeglut-devel/で、コンパイル済みのVC2013用のライブラリファイルを用意してくれてた。

  • include(コンパイル用ヘッダーファイル)
  • lib/freeGlut.Lib(32bit用)
  • lib/x64/freeGlut.Lib(64bit用)
  • bin/freeGlut.dll(32bit用、ダイナミックリンク用DLL)
  • bin/x64/freeGlut.dll(64bit用、ダイナミックリンク用DLL)

ありがたい、しかしこっちはVC2015なのと将来リコンパイル出来ないとなんか不安なので自分で作っておくことにする。

自分でコンパイル

旧バージョンにはVCのプロジェクトファイルがついていたのに3.00では、VCのプロジェクトファイルがついてないので自分で登録していく。結果、プリプロセッサの定義なんかがポロポロ抜けているのを探して追加してやる必要ができたけど、そんなに修正箇所は多くない。

まずはスタティックライブラリの新規作成プロジェクトを立ち上げる

・Visula Studio2015 >ファイル > 新規プロジェクト >Win32 Project
・Win32アプリケーション ウィザード > 次へ > アプリケーション設定 > スタティックライブラリにチェック

vc2015trouble.PNG
この次に押す「完了」ボタンが見えていないので、画面をドラッグするか、TABキーを駆使して画面下にたどり着いて「完了」を押す

ソースコードの追加

以下のファイル群をVisual Studioに追加。
※ただしandroid,blackberry,egl,osx,x11の各フォルダは除外

freeglut-3.0.0/src/*.*
freeglut-3.0.0/src/mswin/*.*
freeglut-3.0.0/src/util/*.*

vc2015tree.png
つまりこんな感じ。

コンパイル設定

  • 追加のIncludeディレクトリに以下を追加
    freeglut-3.0.0/include
    相対パスにするとうまく機能しなかった。絶対パスにしたら通った。
    相対はうまくいかないので絶対パスもソリューションファイルのある場所からの絶対パスにしたらうまくいった
    $(SolutionDir)\
    ココがとっても詳しい http://minus9d.hatenablog.com/entry/2014/02/16/230634
    $(SolutionDir).slnフォルダが置いてあるフォルダのフルパスC:\somewhere\your_appli\
    $(ProjectDir)プロジェクトのフォルダのフルパスC:\somewhere\your_appli\some_project\
    $(TargetDir)ビルドにより生成される.exeファイルが置かれるフォルダのフルパスC:\somewhere\your_appli\Debug\
    $(Configuration)プロジェクトのコンフィギュレーションDebug か Releaseか
    $(Platform)プラットフォーム。Win32かx64か
    $(ProjectName)プロジェクトの名前some_project
  • プリコンパイル済みヘッダを「使用しない」設定にする
    vc2015pch.png

コンパイルエラー

_CRT_SECURE_NO_WARNINGS

エラーメッセージによると安全でない古い「sprintf系」が使われているので「_CRT_SECURE_NO_WARNINGS」を定義してね、とのこと。

エラー	C4996	'_snprintf': This function or variable may be unsafe.
Consider using _snprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS

面倒なのでプリプロセッサに定義した。

FREEGLUT_BUILDING_LIBの定義がないファイルがある

これも面倒なのでプリプロセッサに定義してもいいし、「gles_stubs.c」のコンパイルで指摘されているので、ヘッダーファイルのinclude前に定義を追加してやってもいい。

gles_stubs.cの3行目

#define FREEGLUT_BUILDING_LIB  //←コレを追加した
#include <GL/freeglut.h>
#include "fg_internal.h"

WidthValueが定義されていない

xparsegeometry_repl.hの定義が届いていないファイルが有る。

fg_init.cの28行目

#include <GL/freeglut.h>
#include "util/xparsegeometry_repl.h" //←コレを追加

x86 Debugでコンパイルが通らない

プリプロセッサに以下を追加してやる

FREEGLUT_STATIC

出来た!

1>  freeGlut.vcxproj -> D:\dev\libMake\libMake\x64\Debug\freeGlut.lib
========== ビルド: 1 正常終了、0 失敗、0 更新不要、0 スキップ ==========

注意点

プリプロセッサの定義と、includeディレクトリの追加は構成ごとに設定しなくてはならないので、4種とも全部やっておくこと。

  • x86 Debug / Release
  • x64 Debug / Release

プロジェクトを右クリック > プロパティ

構成プロパティ > VC++ Directories > Include Directories(includeディレクトリを追加)
C/C++ > Precompiled Headers > Precompiled Header(Not Using~ に設定)
C/C++ > Preprocessor >Preprocessor definition「FREEGLUT_BUILDING_LIB;FREEGLUT_STATIC;」を追加

添付ファイル: filevc2015tree.png 216件 [詳細] filevc2015pch.png 217件 [詳細] filevc2015trouble.PNG 215件 [詳細]