しつこいようですが、念のため、「HSP3.6β3テストのお願い」の
NO.92220 の法貴優雅さんのもの、NO.92230 の私のものと引き継いだ、まとめとしてのプログラムを載せておきます。
「hsp364/sample/hgimg4」に入れてやってみて下さい。
フォント「マキナス 4 Square」をダウンロードして、その中の"Makinas-4-Square.otf"を、同「hgimg4」フォルダか、コントロールパネルのフォントフォルダに入れてやっています。
#include "hgimg4.as"
#include "hsp3dish.as"
#include "gdi32.as"
GX = 320
GY = 180
SX = 1280
SY = 720
;…………………………………………………………………
// 横/縦方向の表示倍率(実数)を取得
zoomx = 1.0 * (SX / GX)
zoomy = 1.0 * (SY / GY)
;…………………………………………………………………
onexit *_exit
;…………………………………………………………………
// HSPTV!掲示板 NO.27103-[Kpan]さん
// hspファイルと同じフォルダに、フォントファイル"Makinas-4-Square.otf"を置いたうえで、
// 同フォルダ内でそのファイルにアクセスする命令 [AddFontMemResourceEx] を使う
// そのため、同フォルダ内にないと、正常に実行されないため、有無は [stat] で判断
notesel buf
noteload "Makinas-4-Square.otf"
AddFontMemResourceEx varptr(buf), strsize, 0, varptr(pcFonts)
hFont = stat
;…………………………………………………………………
screen 0, SX, SY, 0
gpreset
buffer 1, GX, GY, screen_offscreen + screen_usergcopy
buffer 2, SX, SY, screen_offscreen + screen_usergcopy
cls 4//黒でクリアは、ここでなくとも、[gsel 2] の時点でもよい
buffer 3, SX, SY, screen_offscreen + screen_usergcopy
;==================================================
setcls 0// ここがキモ
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
// "hgimg4.as" 用 データロード
/*
// 例).背景用ノード(画面塗りつぶしをしない場合用)
gpusermat id_cubemat, "res/shaders/skybox.vert", "res/shaders/skybox.frag"
gpmatprmt id_cubemat, "u_diffuseTexture", "res/cubemap.png", GPOBJ_MATOPT_NOMIPMAP|GPOBJ_MATOPT_CUBEMAP
gpmatprm4 id_cubemat, "u_voffset", 0,14.0,0,0
gpbox id_sky,-30,-1, id_cubemat
setpos id_sky,0,13,0
*/
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
// 例).モデル等読み込み設定
setpos GPOBJ_CAMERA, 0, 2, 5
gpload id_model,"res/tamane2"
setpos id_model,2, 0, 0
setscale id_model, 0.01,0.01,0.01
gpact id_model
gpbox id_box, 0.5, 0xFF0000
setpos id_box, 0, 3, 0
gppbind id_box, 1, 0.5
gpfloor id_floor, 300,300, $404040
gppbind id_floor, 0
//setreq SYSREQ_USEGPBFONT, 1
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
*mainLoop
title "Mes_W = "+Mes_W+" / Mes_H = "+Mes_H
;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
;━━文字専用バッファ [gsel 2] ━━━━━━━━━━━━━━━━━━━━━━
// [SX x SY] = [1280 x 720] [screen 0] と同じ大きさのバッファを
// [gmode 2] = 透明色付きコピーモードを使うため、[cls 4] 黒色で塗りつぶしておき、
// ここに本来の "マキナス 4 Square" を、本来の大きさ [60] で、本来の位置 [pos 0, 0] に [mes] する
// 文字表示のみなので、[gpdraw] なし
gsel 2
//cls 4//黒でクリアは、ここでなくとも、[buffer] 命令の記述時点でもよい
redraw 0
color 255, 255, 255
objcolor 16, 16, 16
font "マキナス 4 Square", 60, font_antialias, 6// [outline=6]として明瞭化
pos 0, 0:mes "テスト1234567890ABC", mesopt_outline
;…………………………………………………………………
Mes_W = ginfo_mesx : Mes_H = ginfo_mesy
// [font "マキナス 4 Square", 60]の場合、プリントスクリーンして測ると、
// 文字表示範囲の大きさは、[540x48]ほどになるようだが、
// 取得値は、[ginfo_mesx = 540 : ginfo_mesy = 59] になっている
// [mesopt_outline] 等、文字装飾のスペース確保のためか?
;…………………………………………………………………
redraw 1
;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
;━━文字専用バッファ [gsel 3] ━━━━━━━━━━━━━━━━━━━━━━
// [SX x SY] = [1280 x 720] [screen 0] と同じ大きさのバッファ
gsel 3
redraw 0
gmode 0, GX, GY
pos 0, 0:gzoom SX, SY, 2, 0, 0, GX, GY
// [buffer 2] = 大きさ[SX x SY]のバッファの[ 0, 0, GX, GY]の範囲を
// 大きさ[SX x SY]の[gsel 3]に大きさ[SX x SY]に[gzoom]
redraw 1
;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
;━━文字以外全部専用バッファ [gsel 1] ━━━━━━━━━━━━━━━━━━
// [GX x GY] = [320 x 180] の大きさのバッファ
// "hgimg4.as" 用であるので、[gpdraw] 必須。記述位置に注意
gsel 1
redraw 0
// gpdraw// ここはダメ
color 0, 255, 0 : boxf// 仮に緑色で塗りつぶし
gpdraw// ここに記述。これ以下、[redraw 1] との間に、"hgimg4.as" による描画を記述
color 255
boxf 0, 0, 64, 64
addang id_model,0,0.02 ; ノード回転
redraw 1
;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
;〓〓主画面 [screen 0] 〓〓━━━━━━━━━━━━━━━━━━━━━━━━
;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// コピー表示のみなので、[gpdraw] なし
gsel 0
redraw 0
pos 0, 0:gzoom SX, SY, 1, 0, 0, GX, GY// "hgimg4.as" 用バッファ [buffer 1] のコピー表示
gmode 2// = 透明色付きコピーモードで、[gcopy] を使う
pos 0, 0:gcopy 3, 0, 0, SX, SY// 文字専用バッファ [buffer 3] 全体のコピー表示
// [buffer 3] の文字表示範囲部分のみのコピー表示ならば
// pos 0, 0:gcopy 3, 0, 0, Mes_W * zoomx, Mes_H * zoomy
redraw 1
;━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
await 16
goto *mainLoop
;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
*_exit
RemoveFontMemResourceEx hFont
end