LosaDev source snapshot 2019

This commit is contained in:
LosaDev committed 2026-11-07 13:30:45 +07:00
commit c198676e97
20588 files changed
+8812878

No files matched your search

+42
View File
@@ -0,0 +1,42 @@
# Build output (Visual Studio 2010, v100)
[Dd]ebug/
[Rr]elease/
[Ss]hipping*/
Ship_*/
LOCAL_DBG/
LSWC/
ipch/
.vs/
*.obj
*.pch
*.ipch
*.pdb
*.ilk
*.idb
*.sbr
*.bsc
*.cod
*.tlog
*.lastbuildstate
*.unsuccessfulbuild
*.sdf
*.opensdf
*.suo
*.user
*.ncb
*.aps
*.VC.db
*.VC.opendb
*.iobj
*.ipdb
# Generated by the TortoiseSVN pre-build step or by hand (see the wiki)
Version.h
# Server output folders created by the post-build steps (one level above the repository)
/build/
# Local files
Thumbs.db
desktop.ini
*.dmp
@@ -0,0 +1,66 @@
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_game_get_data] Script Date: 2017-12-07 오후 6:59:20 ******/
DROP PROCEDURE [dbo].[game_game_get_data]
GO
/****** Object: StoredProcedure [dbo].[game_game_get_data] Script Date: 2017-12-07 오후 6:59:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--IF OBJECT_ID('dbo.game_practice_get_list','P') IS NOT NULL
--
-- DROP PROC dbo.game_practice_get_list
--
--GO
-- =============================================
-- Subject : dbo.game_practice_get_list
-- DBA :
-- DATE : 2014-03-03
-- Description : 훈련하기 데이터
-- =============================================
Create PROCEDURE [dbo].[game_game_get_data]
(
@userID varchar(12)
)
As
SET NOCOUNT ON
DECLARE @CURRENTDATE DATETIME
DECLARE @CONNECTDATE DATETIME
SET @CURRENTDATE = GETDATE();
SET @CONNECTDATE = ( SELECT conndate FROM dbo.userGameDB WHERE accountIDX IN ( SELECT accountIDX FROM dbo.userMemberDB WHERE userID = @userID ))
BEGIN
IF( @CURRENTDATE < @CONNECTDATE )
SET @CONNECTDATE = @CURRENTDATE
END
SELECT a.accountIDX, b.userID, b.nickName, a.userState, a.gameMoney
, a.conn_count, @CONNECTDATE, a.userLevel, a.userEXP--, a.relateLevel
, b.eventType, isNull(c.class,0) as 'class', b.joinType, b.regDate, a.regionType
, a.rencpoint, a.renspoint, isNull(c.region,0) as 'region', b.cpType, ISNULL(d.cpID, '') AS 'cpID'
, ISNULL(d.note, '') AS 'cpUNIQ', b.limitType, b.limitDate, a.userFishingLevel, a.userFishingEXP
, a.refillData, a.userExcavationLevel, a.userExcavationEXP, a.userHerocEXP, a.userHerosEXP, a.practice
FROM userGameDB a WITH( NOLOCK )
JOIN userMemberDB b WITH( NOLOCK )
ON a.accountIDX = b.accountIDX
LEFT JOIN userRankingDB c WITH( NOLOCK )
ON a.accountIDX = c.accountIDX
LEFT JOIN userCooperationDB d WITH( NOLOCK )
ON a.accountIDX=d.accountIDX WHERE b.userID = @userID
+123
View File
@@ -0,0 +1,123 @@
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_game_save] Script Date: 2017-12-07 오후 6:59:20 ******/
DROP PROCEDURE [dbo].[game_game_save]
GO
/****** Object: StoredProcedure [dbo].[game_game_save] Script Date: 2017-12-07 오후 6:59:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--IF OBJECT_ID('dbo.game_practice_get_list','P') IS NOT NULL
--
-- DROP PROC dbo.game_practice_get_list
--
--GO
-- =============================================
-- Subject : dbo.game_practice_get_list
-- DBA :
-- DATE : 2014-03-03
-- Description : 훈련하기 데이터
-- =============================================
Create PROCEDURE [dbo].[game_game_save]
(
@accountIDX int
, @userState int
, @gameMoney bigint
, @conn_count int
, @connDate datetime
, @userLevel int
, @userEXP int
, @playTime int
, @regionType int
, @userFishingLevel int
, @userFishingEXP int
, @refillData int
, @userExcavationLevel int
, @userExcavationEXP int
, @init_time int
)
As
SET NOCOUNT ON
IF @userLevel < 50
BEGIN
-- 기존 루틴 그대로
UPDATE dbo.userGameDB
SET gameMoney = @gameMoney
, userState = @userState
, playTime = playTime + Round((@playTime/1000)/60,0)
, conn_count = @conn_count
, userLevel = @userLevel
, userEXP = @userEXP
, userFishingLevel = @userFishingLevel
, userFishingEXP = @userFishingEXP
, regionType = @regionType
, connDate = @connDate
, refillData = @refillData
, userExcavationLevel = @userExcavationLevel
, userExcavationEXP = @userExcavationEXP
, Practice = 0
WHERE accountIDX = @accountIDX
END
ELSE
BEGIN
--
IF( EXISTS( SELECT * FROM dbo.userRelativeLevelDB WITH( NOLOCK )
WHERE accountIDX = @accountIDX ) )
BEGIN
UPDATE dbo.userGameDB
SET gameMoney = @gameMoney
, userState = @userState
, playTime = playTime + Round((@playTime/1000)/60,0)
, conn_count = @conn_count
--, userLevel = @userLevel
, userEXP = @userEXP
, userFishingLevel = @userFishingLevel
, userFishingEXP = @userFishingEXP
, regionType = @regionType
, connDate = @connDate
, refillData = @refillData
, userExcavationLevel = @userExcavationLevel
, userExcavationEXP = @userExcavationEXP
, Practice = 0
WHERE accountIDX = @accountIDX
UPDATE dbo.userRelativeLevelDB
SET init_time = @init_time
WHERE accountIDX = @accountIDX
END
ELSE
BEGIN
-- 기존 루틴 그대로 : 혹시나 ?
UPDATE dbo.userGameDB
SET gameMoney = @gameMoney
, userState = @userState
, playTime = playTime + Round((@playTime/1000)/60,0)
, conn_count = @conn_count
, userLevel = @userLevel
, userEXP = @userEXP
, userFishingLevel = @userFishingLevel
, userFishingEXP = @userFishingEXP
, regionType = @regionType
, connDate = @connDate
, refillData = @refillData
, userExcavationLevel = @userExcavationLevel
, userExcavationEXP = @userExcavationEXP
, Practice = 0
WHERE accountIDX = @accountIDX
END
END
@@ -0,0 +1,46 @@
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_practice_BlockList] Script Date: 01/11/2018 11:59:29 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[game_practice_BlockList]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[game_practice_BlockList]
GO
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_practice_BlockList] Script Date: 01/11/2018 11:59:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--IF OBJECT_ID('dbo.game_practice_BlockList','P') IS NOT NULL
--
-- DROP PROC dbo.game_practice_BlockList
--
--GO
-- =============================================
-- Subject : dbo.game_practice_BlockList
-- DBA :
-- DATE : 2015-06-17
-- Description : ÈÆ·Ã µ¥ÀÌÅÍ »ý¼º
-- =============================================
CREATE PROCEDURE [dbo].[game_practice_BlockList]
@KickID varchar(20)
AS
SET NOCOUNT ON;
SET LOCK_TIMEOUT 10000;
SELECT accountIDX FROM LosaGame.dbo.userMemberDB WHERE limitType = 100 AND limitDate > Getdate() - 3 AND userID = @KickID
GO
@@ -0,0 +1,68 @@
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_practice_Init_count] Script Date: 2017-12-07 오후 6:59:20 ******/
DROP PROCEDURE [dbo].[game_practice_Init_count]
GO
/****** Object: StoredProcedure [dbo].[game_practice_Init_count] Script Date: 2017-12-07 오후 6:59:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--IF OBJECT_ID('dbo.game_practice_get_list','P') IS NOT NULL
--
-- DROP PROC dbo.game_practice_get_list
--
--GO
-- =============================================
-- Subject : dbo.game_practice_get_list
-- DBA :
-- DATE : 2014-03-03
-- Description : 훈련하기 데이터
-- =============================================
Create PROCEDURE [dbo].[game_practice_Init_count]
@ACCOUNT_IDX INT,
@PRACTICE_IDX INT, -- 연습 인덱스
@PRACTICE_COUNT INT -- 수련장 입장횟수
AS
SET NOCOUNT ON;
SET LOCK_TIMEOUT 10000;
SELECT COUNT(*) FROM dbo.userPracticeDB WHERE AccountIDX = @ACCOUNT_IDX AND PracticeIDX = @PRACTICE_IDX
IF(@@ROWCOUNT = 0)
BEGIN
SELECT -1;
RETURN ;
END
BEGIN TRAN
UPDATE dbo.userPracticeDB
SET PracticeCount = @PRACTICE_COUNT
WHERE AccountIDX = @ACCOUNT_IDX AND PracticeIDX = @PRACTICE_IDX
IF (@@ROWCOUNT = 0) or (@@ERROR <> 0)
BEGIN
ROLLBACK TRAN
SELECT -1;
RETURN;
END
COMMIT TRAN
SELECT 1;
RETURN;
GO
@@ -0,0 +1,53 @@
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_practice_get_list] Script Date: 11/18/2017 17:09:36 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[game_practice_get_list]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[game_practice_get_list]
GO
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_practice_get_list] Script Date: 11/18/2017 17:09:36 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--IF OBJECT_ID('dbo.game_practice_get_list','P') IS NOT NULL
--
-- DROP PROC dbo.game_practice_get_list
--
--GO
-- =============================================
-- Subject : dbo.game_practice_get_list
-- DBA :
-- DATE : 2014-03-03
-- Description : ÈÆ·ÃÇϱ⠵¥ÀÌÅÍ
-- =============================================
CREATE PROCEDURE [dbo].[game_practice_get_list]
@topn INT,
@ACCOUNT_IDX INT,
@PRACTICE_IDX INT
AS
SET NOCOUNT ON;
SET LOCK_TIMEOUT 10000;
SELECT TOP (@topn) practiceIDX, UPD.AccountIDX, UMD.NickName, PracticeTime, UpdateDate
FROM dbo.userPracticeDB AS UPD WITH (READUNCOMMITTED)
JOIN dbo.userMemberDB AS UMD on UPD.AccountIDX = UMD.accountIDX
WHERE UPD.AccountIDX <= @ACCOUNT_IDX AND UMD.limitDate < GETDATE()
ORDER by UPD.AccountIDX DESC
GO
@@ -0,0 +1,44 @@
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_practice_get_my_Ranking_list] Script Date: 2017-12-07 오후 6:59:20 ******/
DROP PROCEDURE [dbo].[game_practice_get_my_Ranking_list]
GO
/****** Object: StoredProcedure [dbo].[game_practice_get_my_Ranking_list] Script Date: 2017-12-07 오후 6:59:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--IF OBJECT_ID('dbo.game_practice_get_list','P') IS NOT NULL
--
-- DROP PROC dbo.game_practice_get_list
--
--GO
-- =============================================
-- Subject : dbo.game_practice_get_list
-- DBA :
-- DATE : 2014-03-03
-- Description : 훈련하기 데이터
-- =============================================
Create PROCEDURE [dbo].[game_practice_get_my_Ranking_list]
@ACCOUNT_IDX INT
AS
SET NOCOUNT ON;
SET LOCK_TIMEOUT 10000;
SELECT StartDate, EndDate, PracticeIDX, PracticeRank, PresentType1, Code1, Value1, PresentType2, Code2, Value2, PresentType3, Code3, Value3, PresentType4, Code4, Value4, PresentType5, Code5, Value5
FROM dbo.userPracticeDB_Ranking AS UPR WITH (READUNCOMMITTED)
INNER JOIN dbo.userPracticeDB_Present AS UPP ON UPR.value = UPP.PresentValue
WHERE AccountIDX = @ACCOUNT_IDX
@@ -0,0 +1,50 @@
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_practice_get_my_list] Script Date: 2017-12-07 오후 6:59:20 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[game_practice_get_my_list]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[game_practice_get_my_list]
GO
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_practice_get_my_list] Script Date: 2017-12-07 오후 6:59:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--IF OBJECT_ID('dbo.game_practice_get_my_list','P') IS NOT NULL
--
-- DROP PROC dbo.game_practice_get_my_list
--
--GO
-- =============================================
-- Subject dbo.game_practice_get_my_list
-- DBA
-- DATE 2014-03-03
-- Description 훈련하기 데이터
-- =============================================
CREATE PROCEDURE [dbo].[game_practice_get_my_list]
@ACCOUNT_IDX INT
AS
SET NOCOUNT ON;
SET LOCK_TIMEOUT 10000;
SELECT practiceIDX, PracticeGrade, PracticeCount, PracticeTime, PracticeRank
FROM dbo.userPracticeDB WITH (READUNCOMMITTED)
WHERE AccountIDX = @ACCOUNT_IDX
GO
@@ -0,0 +1,110 @@
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_practice_rank_Reward_Cursor] Script Date: 11/23/2017 12:48:42 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[game_practice_rank_Reward_Cursor]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[game_practice_rank_Reward_Cursor]
GO
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_practice_rank_Reward_Cursor] Script Date: 11/23/2017 12:48:42 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--IF OBJECT_ID('dbo.game_practice_rank_Reward_Cursor','P') IS NOT NULL
--
-- DROP PROC dbo.game_practice_rank_Reward_Cursor
--
--GO
-- =============================================
-- Subject : dbo.game_practice_rank_Reward_Cursor
-- DBA :
-- DATE : 2015-06-17
-- Description : ÈÆ·Ã µ¥ÀÌÅÍ »ý¼º
-- =============================================
CREATE PROCEDURE [dbo].[game_practice_rank_Reward_Cursor]
@RankAStart Int, @RankAEnd Int, @RankAType Int, @RankACode Int, @RankAMent Int, @RankAPeriad Int,
@RankBStart Int, @RankBEnd Int, @RankBType Int, @RankBCode Int, @RankBMent Int, @RankBPeriad Int,
@RankCStart Int, @RankCEnd Int, @RankCType Int, @RankCCode Int, @RankCMent Int, @RankCPeriad Int,
@RankDStart Int, @RankDEnd Int, @RankDType Int, @RankDCode Int, @RankDMent Int, @RankDPeriad Int,
@RankDID varchar(20)
AS
BEGIN
/*
SET @RankAStart Int = 1, @RankAEnd Int = 2, @RankAType Int = 3, @RankACode Int = 1000039, @RankAMent Int = 1128, @RankAPeriad Int = 28
SET @RankBStart Int = 3, @RankBEnd Int = 5, @RankBType Int = 3, @RankBCode Int = 1000039, @RankBMent Int = 1128, @RankBPeriad Int = 28
SET @RankCStart Int = 6, @RankCEnd Int = 10, @RankCType Int = 3, @RankCCode Int = 1000039, @RankCMent Int = 1128, @RankCPeriad Int = 28
SET @RankDStart Int = 11, @RankDEnd Int =999999999, @RankDType Int = 3, @RankDCode Int = 1000039, @RankDMent Int = 1128, @RankDPeriad Int = 28
SET @RankDID varchar(20) = 'DeveloperK'
*/
DECLARE @sendIDX int, @receiveIDX int
SET @sendIDX = (
SELECT accountIDX
FROM [LosaGame].dbo.userMemberDB WITH(NOLOCK)
WHERE nickName=@RankDID
)
IF (@sendIDX IS NULL)
BEGIN
SET @sendIDX = (
SELECT accountIDX
FROM [LosaGame].dbo.userMemberDB WITH(NOLOCK)
WHERE nickName='DeveloperK'
)
END
DECLARE @AccountIDX INT = 0, @Ranking INT = 0
DECLARE RankingRewardCursor CURSOR FAST_FORWARD FOR
SELECT [AccountIDX], RANK()over(PARTITION BY PracticeIDX ORDER BY PracticeTime, UpdateDate) AS PracticeRank
FROM [LosaGame].[dbo].[userPracticeDB]
OPEN RankingRewardCursor
FETCH NEXT FROM RankingRewardCursor
INTO @AccountIDX, @Ranking
WHILE @@FETCH_STATUS = 0
BEGIN
IF @RankAStart <= @Ranking AND @Ranking <= @RankAEnd
BEGIN
-- exec game_present_add_idx @sendIDX, @AccountIDX, @RankAType, @RankACode, 1, 0, 0, @RankAMent, GetDate() + @RankAPeriad, 0, 0
SELECT 1111, @sendIDX, @AccountIDX, @RankAType, @RankACode, 1, 0, 0, @RankAMent, GetDate() + @RankAPeriad, 0, 0
END
ELSE IF @RankBStart <= @Ranking AND @Ranking <= @RankBEnd
BEGIN
-- exec game_present_add_idx @sendIDX, @AccountIDX, @RankBType, @RankBCode, 1, 0, 0, @RankBMent, GetDate() + @RankBPeriad, 0, 0
SELECT 2222, @sendIDX, @AccountIDX, @RankBType, @RankBCode, 1, 0, 0, @RankBMent, GetDate() + @RankBPeriad, 0, 0
END
ELSE IF @RankCStart <= @Ranking AND @Ranking <= @RankCEnd
BEGIN
-- exec game_present_add_idx @sendIDX, @AccountIDX, @RankCType, @RankCCode, 1, 0, 0, @RankCMent, GetDate() + @RankCPeriad, 0, 0
SELECT 3333, @sendIDX, @AccountIDX, @RankCType, @RankCCode, 1, 0, 0, @RankCMent, GetDate() + @RankCPeriad, 0, 0
END
ELSE IF @RankDStart <= @Ranking AND @Ranking <= @RankDEnd
BEGIN
-- exec game_present_add_idx @sendIDX, @AccountIDX, @RankDType, @RankDCode, 1, 0, 0, @RankDMent, GetDate() + @RankDPeriad, 0, 0
SELECT 4444, @sendIDX, @AccountIDX, @RankDType, @RankDCode, 1, 0, 0, @RankDMent, GetDate() + @RankDPeriad, 0, 0
END
FETCH NEXT FROM RankingRewardCursor INTO @AccountIDX, @Ranking
END
CLOSE RankingRewardCursor
DEALLOCATE RankingRewardCursor
GO
--if OBJECT_ID('userPracticeDB_Backup') is not null
--DROP TABLE [LosaGame].[dbo].[userPracticeDB_Backup]
--SELECT * INTO [LosaGame].[dbo].[userPracticeDB_Backup]
--FROM [LosaGame].[dbo].[userPracticeDB]
--TRUNCATE TABLE [LosaGame].[dbo].[userPracticeDB]
END
@@ -0,0 +1,197 @@
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_practice_rank_reward] Script Date: 11/08/2017 10:09:35 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[game_practice_rank_reward]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[game_practice_rank_reward]
GO
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_practice_rank_reward] Script Date: 11/08/2017 10:09:35 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--IF OBJECT_ID('dbo.game_practice_rank_reward','P') IS NOT NULL
--
-- DROP PROC dbo.game_practice_rank_reward
--
--GO
-- =============================================
-- Subject : dbo.game_practice_rank_reward
-- DBA :
-- DATE : 2015-06-17
-- Description : 훈련 데이터 생성
-- =============================================
CREATE PROCEDURE [dbo].[game_practice_rank_reward]
@RankAStart Int, @RankAEnd Int, @RankAMent Int, @RankAPeriad Int,
@RankAType01 Int, @RankACode01 Int, @RankACount01 Int,
@RankAType02 Int, @RankACode02 Int, @RankACount02 Int,
@RankAType03 Int, @RankACode03 Int, @RankACount03 Int,
@RankAType04 Int, @RankACode04 Int, @RankACount04 Int,
@RankAType05 Int, @RankACode05 Int, @RankACount05 Int,
@RankBStart Int, @RankBEnd Int, @RankBMent Int, @RankBPeriad Int,
@RankBType01 Int, @RankBCode01 Int, @RankBCount01 Int,
@RankBType02 Int, @RankBCode02 Int, @RankBCount02 Int,
@RankBType03 Int, @RankBCode03 Int, @RankBCount03 Int,
@RankBType04 Int, @RankBCode04 Int, @RankBCount04 Int,
@RankBType05 Int, @RankBCode05 Int, @RankBCount05 Int,
@RankCStart Int, @RankCEnd Int, @RankCMent Int, @RankCPeriad Int,
@RankCType01 Int, @RankCCode01 Int, @RankCCount01 Int,
@RankCType02 Int, @RankCCode02 Int, @RankCCount02 Int,
@RankCType03 Int, @RankCCode03 Int, @RankCCount03 Int,
@RankCType04 Int, @RankCCode04 Int, @RankCCount04 Int,
@RankCType05 Int, @RankCCode05 Int, @RankCCount05 Int,
@RankDStart Int, @RankDEnd Int, @RankDMent Int, @RankDPeriad Int,
@RankDType01 Int, @RankDCode01 Int, @RankDCount01 Int,
@RankDType02 Int, @RankDCode02 Int, @RankDCount02 Int,
@RankDType03 Int, @RankDCode03 Int, @RankDCount03 Int,
@RankDType04 Int, @RankDCode04 Int, @RankDCount04 Int,
@RankDType05 Int, @RankDCode05 Int, @RankDCount05 Int,
@RankDID varchar(20)
AS
BEGIN
DECLARE @sendIDX int, @receiveIDX int
SET @sendIDX = (
SELECT accountIDX
FROM [LosaGame].dbo.userMemberDB WITH(NOLOCK)
WHERE nickName=@RankDID
)
IF (@sendIDX IS NULL)
BEGIN
SET @sendIDX = (
SELECT accountIDX
FROM [LosaGame].dbo.userMemberDB WITH(NOLOCK)
WHERE nickName='DeveloperK'
)
END
BEGIN TRAN
TRUNCATE TABLE [LosaGame].[dbo].[userPracticeDB_Ranking]
TRUNCATE TABLE [LosaGame].[dbo].[userPracticeDB_Present]
Declare @CurrentDate DateTime
declare @StartDate NVARCHAR(10), @EndDate NVARCHAR(10), @TableDate NVARCHAR(10)
SET @CurrentDate = GetDate()
SET @StartDate = CONVERT(NVARCHAR(10), @CurrentDate - 7, 23)
SET @EndDate = CONVERT(NVARCHAR(10), @CurrentDate, 23)
SET @TableDate = CONVERT(NVARCHAR(10), @CurrentDate , 112)
INSERT INTO [LosaGame].[dbo].[userPracticeDB_Present]
(
PresentValue, PresentType1, Code1 , Value1, PresentType2, Code2 , Value2, PresentType3, Code3 , Value3, PresentType4, Code4 , Value4, PresentType5, Code5 , Value5
)
VALUES
( 1, @RankAType01, @RankACode01, @RankACount01, @RankAType02, @RankACode02, @RankACount02, @RankAType03, @RankACode03, @RankACount03, @RankAType04, @RankACode04, @RankACount04, @RankAType05, @RankACode05, @RankACount05 ),
( 2, @RankBType01, @RankBCode01, @RankBCount01, @RankBType02, @RankBCode02, @RankBCount02, @RankBType03, @RankBCode03, @RankBCount03, @RankBType04, @RankBCode04, @RankBCount04, @RankBType05, @RankBCode05, @RankBCount05 ),
( 3, @RankCType01, @RankCCode01, @RankCCount01, @RankCType02, @RankCCode02, @RankCCount02, @RankCType03, @RankCCode03, @RankCCount03, @RankCType04, @RankCCode04, @RankCCount04, @RankCType05, @RankCCode05, @RankCCount05 ),
( 4, @RankDType01, @RankDCode01, @RankDCount01, @RankDType02, @RankDCode02, @RankDCount02, @RankDType03, @RankDCode03, @RankDCount03, @RankDType04, @RankDCode04, @RankDCount04, @RankDType05, @RankDCode05, @RankDCount05 )
INSERT INTO [LosaGame].[dbo].[userPracticeDB_Ranking]
(
StartDate, EndDate, AccountIDX, PracticeIDX, PracticeRank, sendIDX, value, msgType, limitDate
)
SELECT @StartDate, @EndDate, AccountIDX as AccountIDX, PracticeIDX AS PracticeIDX, PracticeRank AS PracticeRank, @sendIDX AS sendIDX
, CASE WHEN @RankAStart <= PracticeRank AND PracticeRank <= @RankAEnd THEN 1
WHEN @RankBStart <= PracticeRank AND PracticeRank <= @RankBEnd THEN 2
WHEN @RankCStart <= PracticeRank AND PracticeRank <= @RankCEnd THEN 3
WHEN @RankDStart <= PracticeRank AND PracticeRank <= @RankDEnd THEN 4
ELSE 0
END AS presentType
, CASE WHEN @RankAStart <= PracticeRank AND PracticeRank <= @RankAEnd THEN @RankAMent
WHEN @RankBStart <= PracticeRank AND PracticeRank <= @RankBEnd THEN @RankBMent
WHEN @RankCStart <= PracticeRank AND PracticeRank <= @RankCEnd THEN @RankCMent
WHEN @RankDStart <= PracticeRank AND PracticeRank <= @RankDEnd THEN @RankDMent
END AS msgType
, CASE WHEN @RankAStart <= PracticeRank AND PracticeRank <= @RankAEnd THEN GETDATE() + @RankAPeriad
WHEN @RankBStart <= PracticeRank AND PracticeRank <= @RankBEnd THEN GETDATE() + @RankBPeriad
WHEN @RankCStart <= PracticeRank AND PracticeRank <= @RankCEnd THEN GETDATE() + @RankCPeriad
WHEN @RankDStart <= PracticeRank AND PracticeRank <= @RankDEnd THEN GETDATE() + @RankDPeriad
END AS limitDate
FROM
(
SELECT [AccountIDX], RANK()over(PARTITION BY PracticeIDX ORDER BY PracticeTime, UpdateDate) AS PracticeRank, PracticeIDX, PracticeTime
FROM [LosaGame].[dbo].[userPracticeDB]
WHERE AccountIDX NOT IN (SELECT AccountIDX FROM [LosaGame].[dbo].[userMemberDB] WHERE limitType = 100 AND limitDate > Getdate())
AND AccountIDX IN (SELECT AccountIDX FROM [LosaGame].[dbo].[userMemberDB])
) PracticeDB
IF (@@ROWCOUNT = 0) OR (@@ERROR <> 0)
BEGIN
ROLLBACK TRAN
RETURN;
END
INSERT INTO dbo.userPresentDB
(
sendIDX, receiveIDX, presentType, value1, value2, value3, value4, msgType, flag, limitDate, regDate
)
SELECT sendIDX, AccountIDX, PresentType1, Code1, Value1, 0, 0, msgType, 0, limitDate, @CurrentDate FROM [LosaGame].[dbo].[userPracticeDB_Ranking] AS UPR
INNER JOIN [LosaGame].[dbo].[userPracticeDB_Present] AS UPP ON UPR.value = UPP.PresentValue
WHERE Code1 > 0
INSERT INTO dbo.userPresentDB
(
sendIDX, receiveIDX, presentType, value1, value2, value3, value4, msgType, flag, limitDate, regDate
)
SELECT sendIDX, AccountIDX, PresentType2, Code2, Value2, 0, 0, msgType, 0, limitDate, @CurrentDate FROM [LosaGame].[dbo].[userPracticeDB_Ranking] AS UPR
INNER JOIN [LosaGame].[dbo].[userPracticeDB_Present] AS UPP ON UPR.value = UPP.PresentValue
WHERE Code2 > 0
INSERT INTO dbo.userPresentDB
(
sendIDX, receiveIDX, presentType, value1, value2, value3, value4, msgType, flag, limitDate, regDate
)
SELECT sendIDX, AccountIDX, PresentType3, Code3, Value3, 0, 0, msgType, 0, limitDate, @CurrentDate FROM [LosaGame].[dbo].[userPracticeDB_Ranking] AS UPR
INNER JOIN [LosaGame].[dbo].[userPracticeDB_Present] AS UPP ON UPR.value = UPP.PresentValue
WHERE Code3 > 0
INSERT INTO dbo.userPresentDB
(
sendIDX, receiveIDX, presentType, value1, value2, value3, value4, msgType, flag, limitDate, regDate
)
SELECT sendIDX, AccountIDX, PresentType4, Code4, Value4, 0, 0, msgType, 0, limitDate, @CurrentDate FROM [LosaGame].[dbo].[userPracticeDB_Ranking] AS UPR
INNER JOIN [LosaGame].[dbo].[userPracticeDB_Present] AS UPP ON UPR.value = UPP.PresentValue
WHERE Code4 > 0
INSERT INTO dbo.userPresentDB
(
sendIDX, receiveIDX, presentType, value1, value2, value3, value4, msgType, flag, limitDate, regDate
)
SELECT sendIDX, AccountIDX, PresentType5, Code5, Value5, 0, 0, msgType, 0, limitDate, @CurrentDate FROM [LosaGame].[dbo].[userPracticeDB_Ranking] AS UPR
INNER JOIN [LosaGame].[dbo].[userPracticeDB_Present] AS UPP ON UPR.value = UPP.PresentValue
WHERE Code5 > 0
UPDATE dbo.userGameDB SET practice = 1
--------------------------------------------------------------------
-- 0. 프로시져 시작 할때 userGameDB 백업 하자.
--------------------------------------------------------------------
DECLARE @tblName varchar(256), @sql varchar(256)
SET @tblName = '[Backup].dbo.LosaGame_' + @TableDate + '_userPracticeDB_Ranking'
SET @sql = 'SELECT * INTO ' + @tblName + ' FROM [LosaGame].[dbo].[userPracticeDB_Ranking] AS UPR
INNER JOIN [LosaGame].[dbo].[userPracticeDB_Present] AS UPP ON UPR.value = UPP.PresentValue'
execute (@sql)
DECLARE @tblName1 varchar(256), @sqlo varchar(256)
SET @tblName1 = '[Backup].dbo.LosaGame_' + @TableDate + '_userPracticeDB'
SET @sqlo = 'SELECT * INTO ' + @tblName1 + ' FROM [LosaGame].[dbo].[userPracticeDB]'
execute (@sqlo)
TRUNCATE TABLE [LosaGame].[dbo].[userPracticeDB]
COMMIT TRAN
END
@@ -0,0 +1,80 @@
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_practice_set_data] Script Date: 11/08/2017 10:09:35 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[game_practice_set_data]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[game_practice_set_data]
GO
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_practice_set_data] Script Date: 11/08/2017 10:09:35 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--IF OBJECT_ID('dbo.game_practice_set_data','P') IS NOT NULL
--
-- DROP PROC dbo.game_practice_set_data
--
--GO
-- =============================================
-- Subject : dbo.game_practice_set_data
-- DBA :
-- DATE : 2015-06-17
-- Description : 훈련 데이터 생성
-- =============================================
CREATE PROCEDURE [dbo].[game_practice_set_data]
@ACCOUNT_IDX INT, -- 유저 인덱스
@PRACTICE_IDX INT, -- 연습 인덱스
@PRACTICE_GRADE INT, -- 수련장 등급
@PRACTICE_COUNT INT, -- 수련장 입장횟수
@PRACTICE_TIME INT, -- 수련장 시간
@PRACTICE_RANK INT -- 수련장 랭크
AS
SET NOCOUNT ON;
SET LOCK_TIMEOUT 10000;
DECLARE @nReturn INT
SET @nReturn=0 -- True
BEGIN TRAN
IF (EXISTS(SELECT * FROM dbo.userPracticeDB WITH (NOLOCK) WHERE AccountIDX = @ACCOUNT_IDX AND PracticeIDX = @PRACTICE_IDX))
BEGIN
UPDATE dbo.userPracticeDB
SET PracticeGrade = @PRACTICE_GRADE, PracticeCount=@PRACTICE_COUNT
, PracticeTime=@PRACTICE_TIME, PracticeRank=@PRACTICE_RANK
WHERE AccountIDX = @ACCOUNT_IDX
AND PracticeIDX = @PRACTICE_IDX;
END
ELSE
BEGIN
INSERT INTO dbo.userPracticeDB (AccountIDX, PracticeIDX, PracticeCount, PracticeGrade, PracticeTime, PracticeRank, UpdateDate, regDate)
VALUES ( @ACCOUNT_IDX, @PRACTICE_IDX, @PRACTICE_COUNT, @PRACTICE_GRADE, @PRACTICE_TIME, @PRACTICE_RANK, GETDATE(), GETDATE());
END
IF (@@ROWCOUNT = 0) or (@@ERROR <> 0)
BEGIN
ROLLBACK TRAN
SELECT -1;
RETURN;
END
COMMIT TRAN
SELECT @nReturn;
RETURN;
@@ -0,0 +1,85 @@
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_practice_set_Time] Script Date: 11/08/2017 10:09:35 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[game_practice_set_Time]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[game_practice_set_Time]
GO
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_practice_set_Time] Script Date: 11/08/2017 10:09:35 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--IF OBJECT_ID('dbo.game_practice_set_Time','P') IS NOT NULL
--
-- DROP PROC dbo.game_practice_set_Time
--
--GO
-- =============================================
-- Subject : dbo.game_practice_set_Time
-- DBA :
-- DATE : 2015-06-17
-- Description : 훈련 데이터 생성
-- =============================================
CREATE PROCEDURE [dbo].[game_practice_set_Time]
@ACCOUNT_IDX INT, -- 유저 인덱스
@PRACTICE_IDX INT, -- 연습 인덱스
@PRACTICE_GRADE INT, -- 수련장 등급
@PRACTICE_COUNT INT, -- 수련장 입장횟수
@PRACTICE_TIME INT, -- 수련장 시간
@PRACTICE_RANK INT -- 수련장 랭크
AS
SET NOCOUNT ON;
SET LOCK_TIMEOUT 10000;
DECLARE @nReturn INT
SET @nReturn=0 -- True
BEGIN TRAN
IF (EXISTS(SELECT * FROM dbo.userPracticeDB WITH (NOLOCK) WHERE AccountIDX = @ACCOUNT_IDX AND PracticeIDX = @PRACTICE_IDX))
BEGIN
UPDATE dbo.userPracticeDB
SET PracticeGrade = @PRACTICE_GRADE, PracticeCount=@PRACTICE_COUNT
, PracticeTime=@PRACTICE_TIME, PracticeRank=@PRACTICE_RANK
, UpdateDate = GETDATE()
WHERE AccountIDX = @ACCOUNT_IDX
AND PracticeIDX = @PRACTICE_IDX;
END
ELSE
BEGIN
INSERT INTO dbo.userPracticeDB (AccountIDX, PracticeIDX, PracticeCount, PracticeGrade, PracticeTime, PracticeRank, UpdateDate, regDate)
VALUES ( @ACCOUNT_IDX, @PRACTICE_IDX, @PRACTICE_COUNT, @PRACTICE_GRADE, @PRACTICE_TIME, @PRACTICE_RANK, GETDATE(), GETDATE());
END
IF (@@ROWCOUNT = 0) or (@@ERROR <> 0)
BEGIN
ROLLBACK TRAN
SELECT -1;
RETURN;
END
COMMIT TRAN
SELECT @nReturn;
RETURN;
GO
+1
View File
@@ -0,0 +1 @@
ALTER TABLE [LosaGame].[dbo].[userGameDB] ADD Practice SMALLINT NOT NULL CONSTRAINT DF_Practice DEFAULT 1;
+54
View File
@@ -0,0 +1,54 @@
USE [LosaGame]
GO
/****** Object: Table [dbo].[userPracticeDB] Script Date: 2017-11-13 ¿ÀÀü 10:16:55 ******/
DROP TABLE [dbo].[userPracticeDB]
GO
/****** Object: Table [dbo].[userPracticeDB] Script Date: 2017-11-13 ¿ÀÀü 10:16:55 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[userPracticeDB](
[AccountIDX] [int] NOT NULL,
[PracticeIDX] [int] NOT NULL,
[PracticeCount] [int] NOT NULL,
[PracticeGrade] [int] NOT NULL,
[PracticeTime] [int] NOT NULL,
[PracticeRank] [int] NOT NULL,
[UpdateDate][datetime] NOT NULL,
[regDate] [datetime] NOT NULL,
CONSTRAINT [PK_userPracticeDB] PRIMARY KEY CLUSTERED
(
[AccountIDX] ASC,
[PracticeIDX] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[userPracticeDB] ADD CONSTRAINT [DF__userPract__Pract__4AE30379] DEFAULT ((0)) FOR [PracticeIDX]
GO
ALTER TABLE [dbo].[userPracticeDB] ADD CONSTRAINT [DF__userPract__Grade__4BD727B2] DEFAULT ((0)) FOR [PracticeGrade]
GO
ALTER TABLE [dbo].[userPracticeDB] ADD CONSTRAINT [DF__userPract__Count__4BD727B2] DEFAULT ((0)) FOR [PracticeCount]
GO
ALTER TABLE [dbo].[userPracticeDB] ADD CONSTRAINT [DF__userPract__time__4BD727B2] DEFAULT ((999999999)) FOR [PracticeTime]
GO
ALTER TABLE [dbo].[userPracticeDB] ADD CONSTRAINT [DF__userPract__Rank__4BD727B2] DEFAULT ((99999999)) FOR [PracticeRank]
GO
ALTER TABLE [dbo].[userPracticeDB] ADD CONSTRAINT [DF__userPract__UpdateDate__4DBF7024] DEFAULT (getdate()) FOR [UpdateDate]
GO
ALTER TABLE [dbo].[userPracticeDB] ADD CONSTRAINT [DF__userPract__regDa__4DBF7024] DEFAULT (getdate()) FOR [regDate]
GO
@@ -0,0 +1,39 @@
USE [LosaGame]
GO
/****** Object: Table [dbo].[userPracticeDB_Present] Script Date: 2017-12-19 ¿ÀÀü 10:16:23 ******/
DROP TABLE [dbo].[userPracticeDB_Present]
GO
/****** Object: Table [dbo].[userPracticeDB_Present] Script Date: 2017-12-19 ¿ÀÀü 10:16:23 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[userPracticeDB_Present]
(
[PresentValue] [int] NOT NULL,
[PresentType1] [int] NOT NULL,
[Code1] [int] NOT NULL,
[Value1] [int] NOT NULL,
[PresentType2] [int] NOT NULL,
[Code2] [int] NOT NULL,
[Value2] [int] NOT NULL,
[PresentType3] [int] NOT NULL,
[Code3] [int] NOT NULL,
[Value3] [int] NOT NULL,
[PresentType4] [int] NOT NULL,
[Code4] [int] NOT NULL,
[Value4] [int] NOT NULL,
[PresentType5] [int] NOT NULL,
[Code5] [int] NOT NULL,
[Value5] [int] NOT NULL,
CONSTRAINT [PK_userPracticeDB_Present] PRIMARY KEY CLUSTERED
(
[PresentValue] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
@@ -0,0 +1,36 @@
USE [LosaGame]
GO
/****** Object: Table [dbo].[userPracticeDB_Ranking] Script Date: 2017-12-19 ¿ÀÀü 10:16:23 ******/
DROP TABLE [dbo].[userPracticeDB_Ranking]
GO
/****** Object: Table [dbo].[userPracticeDB_Ranking] Script Date: 2017-12-19 ¿ÀÀü 10:16:23 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[userPracticeDB_Ranking]
(
[StartDate] [NVARCHAR](10) NOT NULL,
[EndDate] [NVARCHAR](10) NOT NULL,
[AccountIDX] [int] NOT NULL,
[PracticeIDX] [int] NOT NULL CONSTRAINT [DF__userPractRanking__Pract__4AE30379] DEFAULT ((0)),
[PracticeRank] [int] NOT NULL CONSTRAINT [DF__userPractRanking__Rank__4BD727B2] DEFAULT ((999999999)),
[sendIDX] [int] NOT NULL,
[value] [int] NOT NULL,
[msgType] [int] NULL,
[limitDate] [datetime] NULL,
) ON [PRIMARY]
GO
/****** Object: Index [NCI_T_World_Enthrone_WorldID] Script Date: 2017-06-16 ¿ÀÈÄ 3:55:17 ******/
CREATE NONCLUSTERED INDEX [NCI_userPracticeDB_Ranking] ON [dbo].[userPracticeDB_Ranking]
(
[AccountIDX] ASC,
[PracticeIDX] ASC
)
+69
View File
@@ -0,0 +1,69 @@
USE [msdb]
GO
/****** Object: Job [05:00_game_pcbang_playtime] Script Date: 01/20/2018 11:54:28 ******/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
/****** Object: JobCategory [[Uncategorized (Local)]]] Script Date: 01/20/2018 11:54:28 ******/
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'05:00_game_pcbang_playtime',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'하루전 PC방 플레이시간과 참여유저수에 따른 보너스 캐쉬 지급',
@category_name=N'[Uncategorized (Local)]',
@owner_login_name=N'lstggame', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** Object: Step [하루전 PC방플레이 캐쉬지급] Script Date: 01/20/2018 11:54:28 ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'하루전 PC방플레이 캐쉬지급',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'EXEC game_PCBangPlayTime_Reward',
@database_name=N'LosaGame',
@flags=4
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'PC방 플레이실행',
@enabled=1,
@freq_type=4,
@freq_interval=1,
@freq_subday_type=1,
@freq_subday_interval=0,
@freq_relative_interval=0,
@freq_recurrence_factor=0,
@active_start_date=20180124,
@active_end_date=99991231,
@active_start_time=50000,
@active_end_time=235959,
@schedule_uid=N'53272898-f46a-4e97-8cfe-c19ffa90cec6'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO
@@ -0,0 +1,76 @@
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_PCBangPlayTime_ADD] Script Date: 11/08/2017 10:09:35 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[game_PCBangPlayTime_ADD]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[game_PCBangPlayTime_ADD]
GO
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_PCBangPlayTime_ADD] Script Date: 11/08/2017 10:09:35 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--IF OBJECT_ID('dbo.game_PCBangPlayTime_ADD','P') IS NOT NULL
--
-- DROP PROC dbo.game_PCBangPlayTime_ADD
--
--GO
-- =============================================
-- Subject : dbo.game_PCBangPlayTime_ADD
-- DBA :
-- DATE : 2015-06-17
-- Description : PCBang 플레이 타임
-- =============================================
CREATE PROCEDURE [dbo].[game_PCBangPlayTime_ADD]
@ACCOUNT_IDX INT, -- 유저 인덱스
@PCBangIndex INT -- PC방 인덱스
AS
SET NOCOUNT ON;
SET LOCK_TIMEOUT 10000;
DECLARE @nReturn INT
SET @nReturn=0 -- True
declare @CurrentDate NVARCHAR(10)
SET @CurrentDate = CONVERT(NVARCHAR(10), GetDate(), 112)
BEGIN TRAN
IF (EXISTS(SELECT * FROM dbo.userPCBangPlayTimeDB WITH (NOLOCK) WHERE AccountIDX = @ACCOUNT_IDX ANd PCBangDate = @CurrentDate))
BEGIN
IF (EXISTS(SELECT * FROM dbo.userPCBangPlayTimeDB WITH (NOLOCK) WHERE AccountIDX = @ACCOUNT_IDX AND PCBangIndex = @PCBangIndex ANd PCBangDate = @CurrentDate))
BEGIN
UPDATE dbo.userPCBangPlayTimeDB
SET PCBangPlayTime = PCBangPlayTime + 1
WHERE AccountIDX = @ACCOUNT_IDX AND PCBangIndex = @PCBangIndex ANd PCBangDate = @CurrentDate
END
END
ELSE
BEGIN
INSERT INTO dbo.userPCBangPlayTimeDB (AccountIDX, PCBangIndex, PCBangDate, PCBangPlayTime)
VALUES ( @ACCOUNT_IDX, @PCBangIndex, @CurrentDate, 1);
END
IF (@@ROWCOUNT = 0) or (@@ERROR <> 0)
BEGIN
SELECT -1;
ROLLBACK TRAN
RETURN;
END
COMMIT TRAN
SELECT 1;
RETURN;
@@ -0,0 +1,57 @@
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_PCBangPlayTime_My_RewardList] Script Date: 01/18/2018 12:57:10 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[game_PCBangPlayTime_My_RewardList]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[game_PCBangPlayTime_My_RewardList]
GO
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_PCBangPlayTime_My_RewardList] Script Date: 01/18/2018 12:57:10 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--IF OBJECT_ID('dbo.game_PCBangPlayTime_My_RewardList','P') IS NOT NULL
--
-- DROP PROC dbo.game_PCBangPlayTime_My_RewardList
--
--GO
-- =============================================
-- Subject : dbo.game_PCBangPlayTime_My_RewardList
-- DBA :
-- DATE : 2015-06-17
-- Description : ÈÆ·Ã µ¥ÀÌÅÍ »ý¼º
-- =============================================
CREATE PROCEDURE [dbo].[game_PCBangPlayTime_My_RewardList]
@ACCOUNT_IDX INT
AS
SET NOCOUNT ON;
SET LOCK_TIMEOUT 10000;
SELECT PCBangDate
, AccountIDX
, PCBangCount
, PCBangBonusCash
FROM LosaGame.dbo.userPCBangPregentDB WITH (READUNCOMMITTED)
WHERE AccountIDX = @ACCOUNT_IDX
GO
@@ -0,0 +1,56 @@
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_PCBangPlayTime_PCBangList] Script Date: 01/23/2018 16:51:50 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[game_PCBangPlayTime_PCBangList]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[game_PCBangPlayTime_PCBangList]
GO
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_PCBangPlayTime_PCBangList] Script Date: 01/23/2018 16:51:50 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--IF OBJECT_ID('dbo.game_PCBangPlayTime_PCBangList','P') IS NOT NULL
--
-- DROP PROC dbo.game_PCBangPlayTime_PCBangList
--
--GO
-- =============================================
-- Subject dbo.game_PCBangPlayTime_PCBangList
-- DBA
-- DATE 2014-03-03
-- Description PC¹æÇ÷¹ÀÌŸÀÓ¸®½ºÆ®
-- =============================================
CREATE PROCEDURE [dbo].[game_PCBangPlayTime_PCBangList]
@PCBangIDX INT,
@SearchDate NVARCHAR(16)
AS
SET NOCOUNT ON;
SET LOCK_TIMEOUT 10000;
DECLARE @Date NVARCHAR(10)
SET @Date = replace(@SearchDate, '-', '')
SELECT PCBangDate
,PCBangIndex
,AccountIDX
,PCBangPlayTime
FROM LosaGame.dbo.userPCBangPlayTimeDB WITH (READUNCOMMITTED)
WHERE PCBangIndex = @PCBangIDX AND PCBangDate = @Date AND PCBangPlayTime >= 60
GO
@@ -0,0 +1,85 @@
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_PCBangPlayTime_Reward] Script Date: 2018-01-12 오전 10:31:38 ******/
DROP PROCEDURE [dbo].[game_PCBangPlayTime_Reward]
GO
/****** Object: StoredProcedure [dbo].[game_PCBangPlayTime_Reward] Script Date: 2018-01-12 오전 10:31:38 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--IF OBJECT_ID('dbo.game_PCBangPlayTime_Reward','P') IS NOT NULL
--
-- DROP PROC dbo.game_PCBangPlayTime_Reward
--
--GO
-- =============================================
-- Subject : dbo.game_PCBangPlayTime_Reward
-- DBA :
-- DATE : 2015-06-17
-- Description : 훈련 데이터 생성
-- =============================================
CREATE PROCEDURE [dbo].[game_PCBangPlayTime_Reward]
AS
BEGIN
DECLARE @LimitTime INT = 30
DECLARE @DateTime NVARCHAR(10) = CONVERT(NVARCHAR(10), GetDate()-1, 112)
DECLARE @sendIDX int, @receiveIDX int
SET @sendIDX = (
SELECT accountIDX
FROM [LosaGame].dbo.userMemberDB WITH(NOLOCK)
WHERE nickName='개발자K'
)
IF (@sendIDX IS NULL)
BEGIN
SET @sendIDX = (
SELECT accountIDX
FROM [LosaGame].dbo.userMemberDB WITH(NOLOCK)
WHERE nickName='DeveloperK'
)
END
INSERT INTO LosaGame.dbo.userPCBangPregentDB(PCBangDate, AccountIDX, PCBangCount, PCBangBonusCash)
SELECT PCBangDate, AccountIDX, max(PCBangIndexCount.PCBangCount), max(presentGold)
FROM LosaGame.dbo.userPCBangPlayTimeDB AS PPT
INNER JOIN ( SELECT PCBangIndex, count(PCBangIndex) AS PCBangCount, CASE WHEN count(PCBangIndex) >= 5 THEN 1250
WHEN count(PCBangIndex) >= 4 THEN 750
WHEN count(PCBangIndex) >= 3 THEN 450
WHEN count(PCBangIndex) >= 2 THEN 250
ELSE 100
END AS presentGold FROM LosaGame.dbo.userPCBangPlayTimeDB
WHERE AccountIDX NOT IN (SELECT AccountIDX FROM [LosaGame].[dbo].[userMemberDB] WHERE limitType = 100 AND limitDate > Getdate())
AND PCBangPlayTime >= 60 AND PCBangDate = @DateTime
GROUP by PCBangDate, PCBangIndex) AS PCBangIndexCount
ON PCBangIndexCount.PCBangIndex = PPT.PCBangIndex
WHERE PCBangDate = @DateTime
Group By PCBangDate, PPT.AccountIDX
INSERT INTO LosaGame.dbo.userPresentDB
(
sendIDX, receiveIDX, presentType, value1, value2, value3, value4, msgType, flag, limitDate, regDate
)
SELECT @sendIDX, AccountIDX, 13, PCBangBonusCash, 72, 0, 0, 1132, 0, GETDATE() + 3, Getdate()
FROM LosaGame.dbo.userPCBangPregentDB
WHERE PCBangDate = @DateTime
END
GO
@@ -0,0 +1,118 @@
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_PCBangPlayTime_Reward] Script Date: 2018-01-12 오전 10:31:38 ******/
DROP PROCEDURE [dbo].[game_PCBangPlayTime_Reward]
GO
/****** Object: StoredProcedure [dbo].[game_PCBangPlayTime_Reward] Script Date: 2018-01-12 오전 10:31:38 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--IF OBJECT_ID('dbo.game_PCBangPlayTime_Reward','P') IS NOT NULL
--
-- DROP PROC dbo.game_PCBangPlayTime_Reward
--
--GO
-- =============================================
-- Subject : dbo.game_PCBangPlayTime_Reward
-- DBA :
-- DATE : 2015-06-17
-- Description : 훈련 데이터 생성
-- =============================================
CREATE PROCEDURE [dbo].[game_PCBangPlayTime_Reward]
AS
BEGIN
DECLARE @LimitTime INT = 30
DECLARE @DateTime NVARCHAR(10) = CONVERT(NVARCHAR(10), GetDate(), 112)
DECLARE @sendIDX int, @receiveIDX int
SET @sendIDX = (
SELECT accountIDX
FROM [LosaGame].dbo.userMemberDB WITH(NOLOCK)
WHERE nickName='개발자K'
)
IF (@sendIDX IS NULL)
BEGIN
SET @sendIDX = (
SELECT accountIDX
FROM [LosaGame].dbo.userMemberDB WITH(NOLOCK)
WHERE nickName='DeveloperK'
)
END
DECLARE @PCbangIndex int = 0, @PCBangCount int = 0
DECLARE PCBangPlayTime CURSOR FOR
SELECT PCBangIndex, count(PCBangIndex) AS PCBangCount FROM LosaGame.dbo.userPCBangPlayTimeDB
WHERE AccountIDX NOT IN (SELECT AccountIDX FROM [LosaGame].[dbo].[userMemberDB] WHERE limitType = 100 AND limitDate > Getdate())
AND PCBangPlayTime >= 30 AND PCBangDate = @DateTime
GROUP by PCBangDate, PCBangIndex ORDER BY PCBangDate, PCBangIndex
OPEN PCBangPlayTime
FETCH NEXT FROM PCBangPlayTime INTO @PCbangIndex , @PCBangCount
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT PCBangDate, AccountIDX, @PCBangCount AS PCBangcount,
CASE WHEN @PCBangCount >= 5 THEN 500
WHEN @PCBangCount >= 4 THEN 300
WHEN @PCBangCount >= 3 THEN 200
WHEN @PCBangCount >= 2 THEN 150
ELSE 100
END AS presentGold
FROM LosaGame.dbo.userPCBangPlayTimeDB
WHERE AccountIDX NOT IN (SELECT AccountIDX FROM [LosaGame].[dbo].[userMemberDB] WHERE limitType = 100 AND limitDate > Getdate())
AND PCBangPlayTime >= 30 AND PCBangDate = @DateTime AND PCBangIndex = @PCbangIndex
MERGE LosaGame.dbo.userPCBangPregentDB AS Target
USING (SELECT PCBangDate, AccountIDX, @PCBangCount AS PCBangcount,
CASE WHEN @PCBangCount >= 5 THEN 500
WHEN @PCBangCount >= 4 THEN 300
WHEN @PCBangCount >= 3 THEN 200
WHEN @PCBangCount >= 2 THEN 150
ELSE 100
END AS presentGold
FROM LosaGame.dbo.userPCBangPlayTimeDB
WHERE AccountIDX NOT IN (SELECT AccountIDX FROM [LosaGame].[dbo].[userMemberDB] WHERE limitType = 100 AND limitDate > Getdate())
AND PCBangPlayTime >= 30 AND PCBangDate = @DateTime AND PCBangIndex = @PCbangIndex) AS Source
ON (Target.AccountIDX = Source.AccountIDX AND Target.PCBangDate = Source.PCBangDate)
WHEN MATCHED AND Target.PCBangcount < Source.PCBangcount THEN
UPDATE SET Target.PCBangCount = Source.PCBangcount, Target.PCBangBonusCash = Source.presentGold
WHEN NOT MATCHED BY TARGET THEN
INSERT (PCBangDate, AccountIDX, PCBangCount, PCBangBonusCash)
VALUES (Source.PCBangDate, Source.AccountIDX, Source.PCBangcount, Source.presentGold)
OUTPUT $action, Inserted.*, Deleted.*;
-- 커서를다음칸으로이동시킨다.
FETCH NEXT FROM PCBangPlayTime INTO @PCbangIndex , @PCBangCount
END
CLOSE PCBangPlayTime
DEALLOCATE PCBangPlayTime
INSERT INTO LosaGame.dbo.userPresentDB
(
sendIDX, receiveIDX, presentType, value1, value2, value3, value4, msgType, flag, limitDate, regDate
)
SELECT @sendIDX, AccountIDX, 13, PCBangBonusCash, 7, 0, 0, 1132, 0, GETDATE() + 7, Getdate()
FROM LosaGame.dbo.userPCBangPregentDB
WHERE PCBangDate = @DateTime
END
GO
@@ -0,0 +1,52 @@
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_PCBangPlayTime_mylist] Script Date: 2017-12-07 오후 6:59:20 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[game_PCBangPlayTime_mylist]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[game_PCBangPlayTime_mylist]
GO
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_PCBangPlayTime_mylist] Script Date: 2017-12-07 오후 6:59:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--IF OBJECT_ID('dbo.game_PCBangPlayTime_mylist','P') IS NOT NULL
--
-- DROP PROC dbo.game_PCBangPlayTime_mylist
--
--GO
-- =============================================
-- Subject dbo.game_PCBangPlayTime_mylist
-- DBA
-- DATE 2014-03-03
-- Description PC방플레이타임리스트
-- =============================================
CREATE PROCEDURE [dbo].[game_PCBangPlayTime_mylist]
@ACCOUNT_IDX INT
AS
SET NOCOUNT ON;
SET LOCK_TIMEOUT 10000;
SELECT PCBangDate
,PCBangIndex
,AccountIDX
,PCBangPlayTime
FROM LosaGame.dbo.userPCBangPlayTimeDB WITH (READUNCOMMITTED)
WHERE AccountIDX = @ACCOUNT_IDX AND PCBangPlayTime >= 60
GO
@@ -0,0 +1,39 @@
USE [LosaGame]
GO
/****** Object: Table [dbo].[userPCBangPlayTimeDB] Script Date: 2017-11-13 ¿ÀÀü 10:16:55 ******/
DROP TABLE [dbo].[userPCBangPlayTimeDB]
GO
/****** Object: Table [dbo].[userPCBangPlayTimeDB] Script Date: 2017-11-13 ¿ÀÀü 10:16:55 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[userPCBangPlayTimeDB](
[PCBangDate][NVARCHAR](10) NOT NULL,
[PCBangIndex] [int] NOT NULL,
[AccountIDX] [int] NOT NULL,
[PCBangPlayTime] [int] NOT NULL,
CONSTRAINT [PK_userPCBangPlayTimeDB] PRIMARY KEY CLUSTERED
(
[PCBangDate] ASC,
[AccountIDX] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[userPCBangPlayTimeDB] ADD CONSTRAINT [DF__userPCBangDate__4AE30379] DEFAULT (('')) FOR [PCBangDate]
GO
ALTER TABLE [dbo].[userPCBangPlayTimeDB] ADD CONSTRAINT [DF__userPCBangIndex__4BD727B2] DEFAULT ((0)) FOR [PCBangIndex]
GO
ALTER TABLE [dbo].[userPCBangPlayTimeDB] ADD CONSTRAINT [DF__userAccountIDX__4BD727B2] DEFAULT ((0)) FOR [AccountIDX]
GO
ALTER TABLE [dbo].[userPCBangPlayTimeDB] ADD CONSTRAINT [DF__userPCBangPlayTime__4BD727B2] DEFAULT ((0)) FOR [PCBangPlayTime]
GO
@@ -0,0 +1,39 @@
USE [LosaGame]
GO
/****** Object: Table [dbo].[userPCBangPregentDB] Script Date: 2017-11-13 ¿ÀÀü 10:16:55 ******/
DROP TABLE [dbo].[userPCBangPregentDB]
GO
/****** Object: Table [dbo].[userPCBangPregentDB] Script Date: 2017-11-13 ¿ÀÀü 10:16:55 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[userPCBangPregentDB](
[PCBangDate][NVARCHAR](10) NOT NULL,
[AccountIDX] [int] NOT NULL,
[PCBangCount] [int] NOT NULL,
[PCBangBonusCash] [int] NOT NULL,
CONSTRAINT [PK_userPCBangPregentDB] PRIMARY KEY CLUSTERED
(
[PCBangDate] ASC,
[AccountIDX] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[userPCBangPregentDB] ADD CONSTRAINT [DF__userPCBangPgtDate__4AE30379] DEFAULT (('')) FOR [PCBangDate]
GO
ALTER TABLE [dbo].[userPCBangPregentDB] ADD CONSTRAINT [DF__userrPCBangPgtAccountIDX__4BD727B2] DEFAULT ((0)) FOR [AccountIDX]
GO
ALTER TABLE [dbo].[userPCBangPregentDB] ADD CONSTRAINT [DF__userPCBangPgtIndex__4BD727B2] DEFAULT ((0)) FOR [PCBangCount]
GO
ALTER TABLE [dbo].[userPCBangPregentDB] ADD CONSTRAINT [DF__userPCBangBonusCash__4BD727B2] DEFAULT ((0)) FOR [PCBangBonusCash]
GO
@@ -0,0 +1,144 @@
USE [LosaLogData]
GO
---------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------
-- 로그 저장 테이블 생성 2018-01-15 by bckim,
---------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[log_data_excavating_new](
[RegDate] [datetime] NOT NULL,
[LogIDX] [bigint] IDENTITY(1,1) NOT NULL,
[LogType] [int] NOT NULL,
[AccountIDX] [int] NOT NULL,
[UserID] [varchar](20) NOT NULL,
[UserName] [varchar](20) NOT NULL,
[ExLevel] [int] NOT NULL,
[ExEXP] [int] NOT NULL,
[CType] [int] NOT NULL,
[CLevel] [int] NOT NULL,
[CExpert] [int] NOT NULL,
[RCount] [tinyint] NOT NULL,
[MapID] [int] NOT NULL,
[X] [int] NOT NULL,
[Y] [int] NOT NULL,
[Z] [int] NOT NULL,
[RewardType] [int] NOT NULL,
[Index] [int] NOT NULL,
[Price] [int] NOT NULL,
[Mutiple] [int] NOT NULL,
[ResultMoney] [int] NOT NULL,
[UserIP] [varchar](15) NOT NULL,
CONSTRAINT [PK_log_data_excavating_new_idx] PRIMARY KEY CLUSTERED
(
RegDate ASC,
LogIDX ASC
)
) ON [PRIMARY]
GO
CREATE NONCLUSTERED INDEX [NC_log_data_excavating_new_AccountIDX] ON [dbo].[log_data_excavating_new]
(
AccountIDX ASC
)
GO
SET ANSI_PADDING OFF
GO
---------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------
-- 로그 저장 프로시저 2018-01-15 by bckim,
--
-- 탐사 확장
-- 2122=log_Excavating_log_add INT INT STR STR INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT64 STR
---------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[log_Excavating_log_add]
@LOG_TYPE INT,
@ACCOUNT_IDX INT,
@USER_ID VARCHAR(20),
@USER_NAME VARCHAR(20),
@USER_EX_LEVEL INT,
@USER_EX_EXP INT,
@CLASS_TYPE INT,
@CLASS_LEVEL INT,
@CLASS_EXPERT INT,
@REMAIN_COUNT INT,
@MAP_ID INT,
@X INT,
@Y INT,
@Z INT,
@REWARD_TYPE INT,
@INDEX INT,
@PRICE INT,
@MULIPLE INT,
@RESULT_MONEY BIGINT,
@USER_IP VARCHAR(15)
AS
SET NOCOUNT ON
SET LOCK_TIMEOUT 10000
DECLARE @REG_DATE DATETIME
SET @REG_DATE=GETDATE()
BEGIN TRY
BEGIN TRAN
INSERT dbo.log_data_excavating_new WITH (XLOCK, ROWLOCK) ([RegDate],
[LogType],[AccountIDX],[UserID],[UserName],[ExLevel],
[ExEXP],[CType],[CLevel],[CExpert],[RCount],
[MapID],[X],[Y],[Z],[RewardType],
[Index],[Price],[Mutiple],[ResultMoney],[UserIP] )
VALUES (@REG_DATE,
@LOG_TYPE,@ACCOUNT_IDX,@USER_ID, @USER_NAME,@USER_EX_LEVEL,
@USER_EX_EXP,@CLASS_TYPE,@CLASS_LEVEL,@CLASS_EXPERT,@REMAIN_COUNT,
@MAP_ID,@X,@Y,@Z,@REWARD_TYPE,
@INDEX,@PRICE,@MULIPLE,@RESULT_MONEY,@USER_IP
)
COMMIT TRAN
END TRY
BEGIN CATCH
ROLLBACK TRAN
EXEC dbo.log_errorLog_set_log @ACCOUNT_IDX
RETURN -1
END CATCH
RETURN 0;
GO
@@ -0,0 +1,269 @@
---------------------------------------------------------
------------- CREATE TABLE -----------------
---------------------------------------------------------
USE [LosaGame]
GO
/****** Object: Table [dbo].[userCardMatchingDB] Script Date: 07/11/2018 10:38:07 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[userCardMatchingDB](
[AccountIDX] [int] NOT NULL,
[MissionCount] [int] NOT NULL,
[MissionType] [tinyint] NOT NULL,
[MissionMark1] [tinyint] NOT NULL,
[MissionMark2] [tinyint] NOT NULL,
[Mark1] [tinyint] NOT NULL,
[Mark2] [tinyint] NOT NULL,
[UpdateTime] [datetime] NOT NULL,
[RegDate] [datetime] NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[userCardMatchingDB] ADD DEFAULT ((0)) FOR [MissionCount]
GO
ALTER TABLE [dbo].[userCardMatchingDB] ADD DEFAULT ((0)) FOR [MissionType]
GO
ALTER TABLE [dbo].[userCardMatchingDB] ADD DEFAULT ((0)) FOR [MissionMark1]
GO
ALTER TABLE [dbo].[userCardMatchingDB] ADD DEFAULT ((0)) FOR [MissionMark2]
GO
ALTER TABLE [dbo].[userCardMatchingDB] ADD DEFAULT ((0)) FOR [Mark1]
GO
ALTER TABLE [dbo].[userCardMatchingDB] ADD DEFAULT ((0)) FOR [Mark2]
GO
---------------------------------------------------------
------------- CREATE PROC_1 -----------------
---------------------------------------------------------
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_cardmatching_update_data] Script Date: 07/11/2018 10:52:08 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Subject : dbo.game_cardmatching_update_data
-- Author : bckim
-- DATE : 2018-06-18
-- Description : 카드 매칭 미션 및 데이터 업데이트
-- =============================================
CREATE PROCEDURE [dbo].[game_cardmatching_update_data]
@ACCOUNT_IDX INT,
@UpdateType TINYINT,
@MissionType TINYINT,
@MissionMark1 TINYINT,
@MissionMark2 TINYINT,
@Mark1 TINYINT,
@Mark2 TINYINT
AS
SET NOCOUNT ON;
SET LOCK_TIMEOUT 10000;
BEGIN TRAN
IF( @UpdateType = 0 )
BEGIN
UPDATE [dbo].[userCardMatchingDB] WITH (XLOCK, ROWLOCK) SET [MissionCount] = [MissionCount] +1 ,[MissionType] = @MissionType,
[MissionMark1] = @MissionMark1,[MissionMark2] = @MissionMark2,[Mark1] = @Mark1,[Mark2] = @Mark2, [UpdateTime] = GETDATE(), [RegDate] = GETDATE() WHERE AccountIDX = @ACCOUNT_IDX;
END
ELSE
BEGIN
UPDATE [dbo].[userCardMatchingDB] WITH (XLOCK, ROWLOCK) SET [MissionType] = @MissionType,[MissionMark1] = @MissionMark1,[MissionMark2] = @MissionMark2,
[Mark1] = @Mark1,[Mark2] = @Mark2, [UpdateTime] = GETDATE() WHERE AccountIDX = @ACCOUNT_IDX;
END
IF(@@ROWCOUNT=0)
BEGIN
INSERT INTO [dbo].[userCardMatchingDB] WITH(XLOCK, ROWLOCK) ([MissionCount], [AccountIDX],[MissionType],[MissionMark1],[MissionMark2],[Mark1],[Mark2],[UpdateTime],[RegDate])
VALUES ( 0, @ACCOUNT_IDX, @MissionType, @MissionMark1, @MissionMark2, @Mark1, @Mark2, GETDATE(),GETDATE())
END
COMMIT TRAN
GO
---------------------------------------------------------
------------- CREATE PROC_2 -----------------
---------------------------------------------------------
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_cardmatching_get_data] Script Date: 07/11/2018 11:43:03 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Subject : dbo.game_cardmatching_get_data
-- Author : bckim
-- DATE : 2018-06-18
-- Description : 카드 매칭 미션 및 상태 조회
-- =============================================
CREATE PROCEDURE [dbo].[game_cardmatching_get_data]
@ACCOUNT_IDX INT
AS
SET NOCOUNT ON;
SET LOCK_TIMEOUT 10000;
SELECT [MissionType],[MissionMark1],[MissionMark2],[Mark1],[Mark2],[UpdateTime]
FROM [dbo].[userCardMatchingDB] WITH (NOLOCK)
WHERE [AccountIDX] = @ACCOUNT_IDX
GO
---------------------------------------------------------
------------- CREATE TABLE -----------------
---------------------------------------------------------
USE [LosaLogData]
GO
/****** Object: Table [dbo].[log_data_cardmatching] Script Date: 07/11/2018 11:44:48 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[log_data_cardmatching](
[idx] [int] IDENTITY(1,1) NOT NULL,
[AccountIDX] [int] NOT NULL,
[NickName] [nvarchar](20) NOT NULL,
[UserLevel] [int] NOT NULL,
[LogType] [int] NOT NULL,
[MissionType] [int] NOT NULL,
[MissionMark1] [int] NOT NULL,
[MissionMark2] [int] NOT NULL,
[UserMark1] [int] NOT NULL,
[UserMark2] [int] NOT NULL,
[RewardStep] [int] NOT NULL,
[ItemType] [int] NOT NULL,
[ItemCode] [int] NOT NULL,
[ItemValue] [int] NOT NULL,
[RegDate] [datetime] NOT NULL,
CONSTRAINT [PK_log_data_cardmatching] PRIMARY KEY CLUSTERED
(
[RegDate] ASC,
[idx] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[log_data_cardmatching] ADD DEFAULT ((0)) FOR [LogType]
GO
ALTER TABLE [dbo].[log_data_cardmatching] ADD DEFAULT ((0)) FOR [MissionType]
GO
ALTER TABLE [dbo].[log_data_cardmatching] ADD DEFAULT ((0)) FOR [MissionMark1]
GO
ALTER TABLE [dbo].[log_data_cardmatching] ADD DEFAULT ((0)) FOR [MissionMark2]
GO
ALTER TABLE [dbo].[log_data_cardmatching] ADD DEFAULT ((0)) FOR [UserMark1]
GO
ALTER TABLE [dbo].[log_data_cardmatching] ADD DEFAULT ((0)) FOR [UserMark2]
GO
ALTER TABLE [dbo].[log_data_cardmatching] ADD DEFAULT ((0)) FOR [RewardStep]
GO
ALTER TABLE [dbo].[log_data_cardmatching] ADD DEFAULT ((0)) FOR [ItemType]
GO
ALTER TABLE [dbo].[log_data_cardmatching] ADD DEFAULT ((0)) FOR [ItemCode]
GO
ALTER TABLE [dbo].[log_data_cardmatching] ADD DEFAULT ((0)) FOR [ItemValue]
GO
ALTER TABLE [dbo].[log_data_cardmatching] ADD DEFAULT (getdate()) FOR [RegDate]
GO
---------------------------------------------------------
------------- CREATE PROC_2 -----------------
---------------------------------------------------------
USE [LosaLogData]
GO
/****** Object: StoredProcedure [dbo].[log_data_cardmatching_add] Script Date: 07/11/2018 11:45:23 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Subject : log_data_cardmatching_add
-- Author : bckim
-- Date : 2018-07-01
-- Description : 카드 매칭 로그
-- // 2018-06-18 by bckim, 카드 짝 마추기 이벤트 추가
-- =============================================
CREATE PROCEDURE [dbo].[log_data_cardmatching_add]
@ACCOUNT_IDX INT,
@NICK_NAME NVARCHAR(20),
@USER_LEVEL INT,
@LOG_TYPE INT,
@MISSION_TYPE INT,
@MISSION_MARK1 INT,
@MISSION_MARK2 INT,
@USER_MARK1 INT,
@USER_MARK2 INT,
@REWARD_STEP INT,
@ITEM_TYPE INT,
@ITEM_CODE INT,
@ITEM_VALUE INT
AS
SET NOCOUNT ON;
SET LOCK_TIMEOUT 10000;
INSERT INTO log_data_cardmatching (AccountIDX, NickName,UserLevel,LogType,MissionType,MissionMark1,MissionMark2,UserMark1,UserMark2,RewardStep,ItemType,ItemCode, ItemValue,RegDate)
VALUES (@ACCOUNT_IDX, @NICK_NAME, @USER_LEVEL, @LOG_TYPE, @MISSION_TYPE,@MISSION_MARK1,@MISSION_MARK2,@USER_MARK1,@USER_MARK2,@REWARD_STEP, @ITEM_TYPE, @ITEM_CODE, @ITEM_VALUE, GETDATE())
GO
---------------------------------------------------------
------------- END -----------------
---------------------------------------------------------
+146
View File
@@ -0,0 +1,146 @@
USE [LosaGame]
GO
/****** Object: Table [dbo].[userDiceGameDB] Script Date: 10/11/2018 17:38:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[userDiceGameDB](
[AccountIDX] [int] NOT NULL,
[Position] [int] NOT NULL,
[Trace01] [int] NOT NULL,
[Trace02] [int] NOT NULL,
[Trace03] [int] NOT NULL,
[Trace04] [int] NOT NULL,
[Trace05] [int] NOT NULL,
[Trace06] [int] NOT NULL,
[Board] [tinyint] NOT NULL,
[RewardStep01] [int] NOT NULL,
[RewardStep02] [int] NOT NULL,
[RewardStep03] [int] NOT NULL,
[RewardStep04] [int] NOT NULL,
[RewardStep05] [int] NOT NULL,
[RewardStep06] [int] NOT NULL,
[RewardStep07] [int] NOT NULL,
[RewardStep08] [int] NOT NULL,
[RewardStep09] [int] NOT NULL,
[RewardStep10] [int] NOT NULL,
[UpdateTime] [datetime] NULL,
[RegDate] [datetime] NULL
) ON [PRIMARY]
GO
-------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_dice_game_data_update] Script Date: 10/11/2018 17:40:00 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Subject : dbo.game_dice_game_data_update
-- Author : bckim
-- DATE : 2018-08-30
-- Description : // 2018-08-30 by bckim, 주사위 이벤트 추가
-- =============================================
CREATE PROCEDURE [dbo].[game_dice_game_data_update]
@ACCOUNT_IDX INT,
@Position INT,
@Trace01 INT,
@Trace02 INT,
@Trace03 INT,
@Trace04 INT,
@Trace05 INT,
@Trace06 INT,
@Board TINYINT,
@Reward01 INT,
@Reward02 INT,
@Reward03 INT,
@Reward04 INT,
@Reward05 INT,
@Reward06 INT,
@Reward07 INT,
@Reward08 INT,
@Reward09 INT,
@Reward10 INT
AS
SET NOCOUNT ON;
SET LOCK_TIMEOUT 10000;
BEGIN TRAN
UPDATE [dbo].[userDiceGameDB] WITH (XLOCK, ROWLOCK)
SET [AccountIDX] = @ACCOUNT_IDX,[Position] = @Position,[Trace01] = @Trace01,[Trace02] = @Trace02,[Trace03] = @Trace03,[Trace04] = @Trace04,[Trace05] = @Trace05,[Trace06] = @Trace06,[Board] = @Board,
[RewardStep01] = @Reward01,[RewardStep02] = @Reward02,[RewardStep03] = @Reward03,[RewardStep04] = @Reward04,[RewardStep05] = @Reward05,
[RewardStep06] = @Reward06,[RewardStep07] = @Reward07,[RewardStep08] = @Reward08,[RewardStep09] = @Reward09,[RewardStep10] = @Reward10, [UpdateTime] = GETDATE()
WHERE AccountIDX = @ACCOUNT_IDX;
IF(@@ROWCOUNT=0)
BEGIN
INSERT INTO [dbo].[userDiceGameDB] WITH(XLOCK, ROWLOCK) ([AccountIDX],[Position],[Trace01],[Trace02],[Trace03],[Trace04],[Trace05],[Trace06],[Board],
[RewardStep01],[RewardStep02],[RewardStep03],[RewardStep04],[RewardStep05],[RewardStep06],[RewardStep07],[RewardStep08],[RewardStep09],[RewardStep10],[UpdateTime],[RegDate] )
VALUES ( @ACCOUNT_IDX,@Position,@Trace01,@Trace02,@Trace03,@Trace04,@Trace05,@Trace06,@Board,
@Reward01,@Reward02,@Reward03,@Reward04,@Reward05,@Reward06,@Reward07,@Reward08,@Reward09,@Reward10, GETDATE(),GETDATE())
END
COMMIT TRAN
GO
-------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_dice_game_get_data] Script Date: 10/11/2018 17:40:32 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Subject : dbo.game_dice_game_get_data
-- Author : bckim
-- DATE : 2018-08-30
-- Description : // 2018-08-30 by bckim, 주사위 이벤트 추가
-- =============================================
CREATE PROCEDURE [dbo].[game_dice_game_get_data]
@ACCOUNT_IDX INT
AS
SET NOCOUNT ON;
SET LOCK_TIMEOUT 10000;
SELECT [Position],[Trace01],[Trace02],[Trace03],[Trace04],[Trace05],[Trace06],[Board],
[RewardStep01],[RewardStep02],[RewardStep03],[RewardStep04],[RewardStep05],
[RewardStep06],[RewardStep07],[RewardStep08],[RewardStep09],[RewardStep10]
FROM [dbo].[userDiceGameDB] WITH (NOLOCK)
WHERE [AccountIDX] = @ACCOUNT_IDX
GO
+118
View File
@@ -0,0 +1,118 @@
USE [LosaLogData]
GO
/****** Object: Table [dbo].[log_data_DiceGame] Script Date: 10/11/2018 17:41:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[log_data_DiceGame](
[AccountIDX] [int] NOT NULL,
[GameState] [int] NOT NULL,
[DiceCountUsed] [int] NOT NULL,
[BoardCountUsed] [int] NOT NULL,
[RewardCountUsed] [int] NOT NULL,
[Position] [int] NOT NULL,
[Trace01] [int] NOT NULL,
[Trace02] [int] NOT NULL,
[Trace03] [int] NOT NULL,
[Trace04] [int] NOT NULL,
[Trace05] [int] NOT NULL,
[Trace06] [int] NOT NULL,
[Board] [tinyint] NOT NULL,
[RewardStep01] [int] NOT NULL,
[RewardStep02] [int] NOT NULL,
[RewardStep03] [int] NOT NULL,
[RewardStep04] [int] NOT NULL,
[RewardStep05] [int] NOT NULL,
[RewardStep06] [int] NOT NULL,
[RewardStep07] [int] NOT NULL,
[RewardStep08] [int] NOT NULL,
[RewardStep09] [int] NOT NULL,
[RewardStep10] [int] NOT NULL,
[StartTime] [datetime] NULL,
[EndTime] [datetime] NULL
) ON [PRIMARY]
GO
----------------------------------------------------------------------------
----------------------------------------------------------------------------
USE [LosaLogData]
GO
/****** Object: StoredProcedure [dbo].[log_data_DiceGame_update] Script Date: 10/11/2018 17:41:55 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Subject : dbo.log_data_DiceGame_update
-- Author : bckim
-- DATE : 2018-08-30
-- Description : // 2018-08-30 by bckim, ÁÖ»çÀ§ À̺¥Æ® Ãß°¡_ ·Î±×
-- =============================================
CREATE PROCEDURE [dbo].[log_data_DiceGame_update]
@ACCOUNT_IDX INT,
@Game_State INT,
@DiceCountUsed INT,
@BoardCountUsed INT,
@RewardCountUsed INT,
@Position INT,
@Trace01 INT,
@Trace02 INT,
@Trace03 INT,
@Trace04 INT,
@Trace05 INT,
@Trace06 INT,
@Board TINYINT,
@Reward01 INT,
@Reward02 INT,
@Reward03 INT,
@Reward04 INT,
@Reward05 INT,
@Reward06 INT,
@Reward07 INT,
@Reward08 INT,
@Reward09 INT,
@Reward10 INT
AS
SET NOCOUNT ON;
SET LOCK_TIMEOUT 10000;
BEGIN TRAN
IF EXISTS( SELECT * FROM [dbo].[log_data_DiceGame] WHERE @ACCOUNT_IDX = [AccountIDX] AND [GameState] = 0 )
BEGIN
UPDATE [dbo].[log_data_DiceGame] WITH (XLOCK, ROWLOCK)
SET [GameState] = @Game_State,[DiceCountUsed] = [DiceCountUsed] + @DiceCountUsed,[BoardCountUsed] = [BoardCountUsed] + @BoardCountUsed, [RewardCountUsed] = [RewardCountUsed] + @RewardCountUsed,
[Position] = @Position,[Trace01] = @Trace01,[Trace02] = @Trace02,[Trace03] = @Trace03,[Trace04] = @Trace04,[Trace05] = @Trace05,[Trace06] = @Trace06,[Board] = @Board,
[RewardStep01] = @Reward01,[RewardStep02] = @Reward02,[RewardStep03] = @Reward03,[RewardStep04] = @Reward04,[RewardStep05] = @Reward05,
[RewardStep06] = @Reward06,[RewardStep07] = @Reward07,[RewardStep08] = @Reward08,[RewardStep09] = @Reward09,[RewardStep10] = @Reward10, [EndTime] = GETDATE()
WHERE @ACCOUNT_IDX = [AccountIDX] AND [GameState] = 0
END
ELSE
BEGIN
INSERT INTO [dbo].[log_data_DiceGame] WITH(XLOCK, ROWLOCK)
([AccountIDX],[GameState],[DiceCountUsed],[BoardCountUsed],[RewardCountUsed],[Position],[Trace01],[Trace02],[Trace03],[Trace04],[Trace05],[Trace06],[Board],
[RewardStep01],[RewardStep02],[RewardStep03],[RewardStep04],[RewardStep05],[RewardStep06],[RewardStep07],[RewardStep08],[RewardStep09],[RewardStep10],[StartTime],[EndTime] )
VALUES ( @ACCOUNT_IDX,@Game_State,@DiceCountUsed,@BoardCountUsed,@RewardCountUsed,@Position,@Trace01,@Trace02,@Trace03,@Trace04,@Trace05,@Trace06,@Board,
@Reward01,@Reward02,@Reward03,@Reward04,@Reward05,@Reward06,@Reward07,@Reward08,@Reward09,@Reward10, GETDATE(),GETDATE())
END
COMMIT TRAN
GO
@@ -0,0 +1,14 @@
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_login_get_data] Script Date: 10/19/2018 11:14:27 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[game_login_get_data]
(
@userID varchar(12)
)
As
SELECT b.userID, a.encodeKey, a.gameServerID, connDate, a.UserIP FROM userLoginDB a WITH(NOLOCK) INNER JOIN userMemberDB b WITH(NOLOCK) ON a.accountIDX = b.accountIDX WHERE b.userID=@userID
+234
View File
@@ -0,0 +1,234 @@
<% OPTION EXPLICIT %>
<!-- #include file = "createKey.asp" -->
<%
Response.Expires = 0
Response.AddHeader "Pragma", "no-cache"
Response.AddHeader "Cache-Control", "no-cache, no-store, must-revalidate"
Response.AddHeader "Expires", "-1"
Dim db, dbcon, sql, rs
Dim userID, accountIDX, zoneType, zoneName, gameServerID, userIP
Dim useKey, fixKey
Dim oEncryptor, encodeID, encodeKey, encodeIP, encodeIPKey, sendKeyString, prevKey, exeTime, chgKeyTime
userID = session("userID")
zoneType = Request.Form("zoneType")
useKey = ""
chgKeyTime = 5
userIP = Request.Servervariables("REMOTE_HOST")
Select Case zoneType
Case 1 :
zoneName = "QA_ZONE"
%><!-- #include file = "cnn_game_qa.asp" --><%
Case 3 :
zoneName = "DEV_ZONE"
%><!-- #include file = "cnn_game_dev.asp" --><%
Case Else
zoneName = "DEV_ZONE"
%><!-- #include file = "cnn_game_dev.asp" --><%
End Select
If userID = "" or isNull(userID) or Len(userID) = 0 Then
db.close
Set db=Nothing
%>
<SCRIPT LANGUAGE="JavaScript">
<!--
alert("You can play after login.");
top.location.replace("/default.asp");
//-->
</SCRIPT>
<%
Response.End
End If
'세션 accountIDX 값이 싱글존으로 되어 있어서 다른존과 accountIDX 불일치. 때문에 accountIDX 가져오는 구문 추가
sql = "EXEC web_get_accountIDX '" & userID & "'"
Set rs = db.Execute(sql)
If rs.eof and rs.bof Then
rs.close
Set rs=Nothing
db.close
Set db=Nothing
%>
<SCRIPT LANGUAGE="JavaScript">
<!--
alert("Membership was not successful.");
history.back();
//-->
</SCRIPT>
<%
Response.End
End If
accountIDX = rs("accountIDX")
sql = "EXEC web_game_server_get_data_top1"
Set rs = db.Execute(sql)
If rs.eof and rs.bof Then
rs.close
Set rs=Nothing
db.close
Set db=Nothing
%>
<SCRIPT LANGUAGE="JavaScript">
<!--
alert("No servers are running.");
history.back();
//-->
</SCRIPT>
<%
Response.End
Else
gameServerID = rs("serverID")
End If
useKey = CreateEncodeKey()
sql = "EXEC web_user_login_count '" & userID & "'"
Set rs=db.Execute(sql)
If rs(0) = 0 Then
rs.close
Set rs=Nothing
db.close
Set db=Nothing
%>
<SCRIPT LANGUAGE="JavaScript">
<!--
alert("No sign in information. \ N \ nPlease contact your administrator.");
top.location.replace("/default.asp");
//-->
</SCRIPT>
<%
Response.End
End If
sql = "EXEC web_user_login_enkey_get_data '" & accountIDX & "'"
Set rs = db.Execute(sql)
If rs.eof and rs.bof Then
rs.close
Set rs=Nothing
db.close
Set db=Nothing
%>
<SCRIPT LANGUAGE="JavaScript">
<!--
alert("존별로 유저인덱스가 틀려 접속 <%=zoneName%>에는 접속할 수 없습니다");
history.back();
//-->
</SCRIPT>
<%
Response.End
End If
prevKey = rs("encodeKey")
exeTime = rs("connDate")
If DateDiff("n",exeTime,Now()) < chgKeyTime Then
useKey = prevKey
Else
sql = "EXEC web_user_login_enkey_update '" & userID & "', '" & useKey & "', '" & userIP & "'"
db.Execute(sql)
End If
sql = "EXEC web_fixkey_get_data"
Set rs=db.Execute(sql)
fixKey = rs(0)
Set oEncryptor = Server.CreateObject("IoEncrypt.Encrypt")
encodeID = oEncryptor.Encode15 (userID,fixKey)
encodeKey = oEncryptor.Encode15 (useKey,useKey)
encodeIP = oEncryptor.Encode15 (userIP,fixKey)
encodeIPKey = oEncryptor.Encode15 (useKey,fixKey)
Set oEncryptor = Nothing
Dim strSenKeyString
strSenKeyString = encodeKey & encodeID
Dim strSenIPKeyString
strSenIPKeyString = encodeIPKey & encodeIP
rs.close
Set rs=Nothing
db.close
Set db=Nothing
'response.write(zoneName)
'response.end
'------------------------------------------------------------------------------------------------------------
' 프로토콜 설정
'------------------------------------------------------------------------------------------------------------
Dim strProtocol
strProtocol = "LostSagaQA"
%><!DOCTYPE>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko" lang="ko">
<head>
<title>로스트사가 게임 실행 중입니다. | 로스트사가</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta http-equiv="imagetoolbar" content="no">
<meta http-equiv="expires" content="-1">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<script type="text/javascript" src="jquery-1.8.3.min.js"></script>
<script type="text/javascript" src="util.js"></script>
<script type="text/javascript" src="protocolcheck.js"></script>
<script type="text/javascript">
$(function ()
{
protocolCheck($("#playgame").attr("href"),
function () {
goUrl("webmanager.asp");
},
function () {
goUrl("default.asp");
}
);
});
</script>
</head>
<body class="playing">
<a id="playgame" style="display:;" href="<%=strProtocol%>://<%=strSenKeyString%>,<%=strSenIPKeyString%>,<%=gameServerID%>"></a>
<input type="hidden" id="loginKey" value="<%=strSenKeyString%>" />
<h2 class="blind">게임 실행</h2>
<div class="btnArea">
<button type="button" class="btnImg btnGameRe" title="게임 재실행하기" onclick="goUrl('playUrl.asp')">게임 재실행하기</button>
</div>
<div class="loadingPop">
<div class="loading">
<p>로딩중입니다. 잠시만 기다려주세요. 최초 실행 시 로스트사가 웹매니저 설치 페이지로 이동합니다</p>
</div>
<div id="bgDark"></div>
</div>
</body>
</html>
@@ -0,0 +1,31 @@
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_quest_delete] Script Date: 11/21/2018 11:09:44 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[game_quest_delete]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[game_quest_delete]
GO
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_quest_delete] Script Date: 11/21/2018 11:09:44 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[game_quest_delete]
(
@accountIDX int
)
AS
DELETE FROM userQuestDB WHERE accountIDX = @accountIDX
DELETE FROM userQuestCompleteDB WHERE accountIDX = @accountIDX
GO
@@ -0,0 +1,19 @@
USE [LosaGame]
GO
/****** Object: StoredProcedure [dbo].[game_login_get_data_by_check] Script Date: 02/01/2019 14:07:36 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[game_login_get_data_by_dual_login]
(
@userID varchar(12)
)
As
SELECT b.userID, a.encodeKey, a.gameServerID, connDate -- , a.UserIP
FROM userLoginDB a WITH(NOLOCK) INNER JOIN userMemberDB b WITH(NOLOCK) ON a.accountIDX = b.accountIDX
WHERE b.userID=@userID
+69
View File
@@ -0,0 +1,69 @@
-- LosaDev 2019: procedures the 2019 server calls (ls_query.ini ids 1, 136, 137, 139)
-- that no released DB script contains. Written for the testbed from the server code (DBClient.cpp).
-- Still missing on purpose: 197 game_item_extra_get_list_dev, 1500 SC_ERROR_LOG_ADD,
-- 2108 log_item_bonus_gold_set_add, 2207 game_block_hdd_serial_check (dev/log/anti-cheat only).
USE [LosaGame]
GO
IF OBJECT_ID(N'dbo.game_pingpong', N'P') IS NOT NULL DROP PROCEDURE dbo.game_pingpong
GO
-- id 1: DB agent keep-alive; the code says "a query that does not really exist"
CREATE PROCEDURE dbo.game_pingpong
AS
SET NOCOUNT ON
GO
IF OBJECT_ID(N'dbo.game_member_count', N'P') IS NOT NULL DROP PROCEDURE dbo.game_member_count
GO
-- id 136: OnSelectMemberConut - one LONG back, 0 = new account (the server then calls game_member_add)
CREATE PROCEDURE dbo.game_member_count
@userID varchar(12)
AS
SET NOCOUNT ON
SELECT COUNT(*) FROM dbo.userMemberDB WITH(NOLOCK) WHERE userID = @userID
GO
IF OBJECT_ID(N'dbo.game_member_add', N'P') IS NOT NULL DROP PROCEDURE dbo.game_member_add
GO
-- id 137: OnInsertMember(privateID, publicID) - first login of a publisher account creates the game account
CREATE PROCEDURE dbo.game_member_add
@userID varchar(12),
@nickName varchar(20)
AS
SET NOCOUNT ON
IF EXISTS (SELECT 1 FROM dbo.userMemberDB WITH(NOLOCK) WHERE userID = @userID) RETURN
DECLARE @ret int
EXEC dbo.web_member_add @userID, @nickName, '', '', 0, 0, 0, 0, '127.0.0.1', @ret OUTPUT
GO
IF OBJECT_ID(N'dbo.game_create_nickname', N'P') IS NOT NULL DROP PROCEDURE dbo.game_create_nickname
GO
-- id 139: OnUpdateFirstPublicID(accountIDX, newNick)
CREATE PROCEDURE dbo.game_create_nickname
@accountIDX int,
@nickName varchar(20)
AS
SET NOCOUNT ON
UPDATE dbo.userMemberDB SET nickName = @nickName WHERE accountIDX = @accountIDX
GO
-- id 11 game_game_get_data: the released script returns cpID/cpUNIQ (channeling columns), but the game server only
-- reads them when the locale uses channeling IDs (Korea). The Indonesia locale expects the same row without them.
ALTER PROCEDURE [dbo].[game_game_get_data]
(
@userID varchar(12)
)
As
SET NOCOUNT ON
DECLARE @CURRENTDATE DATETIME
DECLARE @CONNECTDATE DATETIME
SET @CURRENTDATE = GETDATE();
SET @CONNECTDATE = ( SELECT conndate FROM dbo.userGameDB WHERE accountIDX IN ( SELECT accountIDX FROM dbo.userMemberDB WHERE userID = @userID ))
IF( @CURRENTDATE < @CONNECTDATE )
SET @CONNECTDATE = @CURRENTDATE
SELECT a.accountIDX, b.userID, b.nickName, a.userState, a.gameMoney
, a.conn_count, @CONNECTDATE, a.userLevel, a.userEXP
, b.eventType, isNull(c.class,0) as 'class', b.joinType, b.regDate, a.regionType
, a.rencpoint, a.renspoint, isNull(c.region,0) as 'region', b.cpType
, b.limitType, b.limitDate, a.userFishingLevel, a.userFishingEXP
, a.refillData, a.userExcavationLevel, a.userExcavationEXP, a.userHerocEXP, a.userHerosEXP, a.practice
FROM userGameDB a WITH( NOLOCK )
JOIN userMemberDB b WITH( NOLOCK ) ON a.accountIDX = b.accountIDX
LEFT JOIN userRankingDB c WITH( NOLOCK ) ON a.accountIDX = c.accountIDX
WHERE b.userID = @userID
GO
+21
View File
@@ -0,0 +1,21 @@
-- First regular tournament (Faction War / LS Cup panel). The main server only continues a row that exists;
-- nothing creates the first one. leagueType 1 = TYPE_REGULAR, leagueState 1 = STATE_TEAM_APP, accountIDX 0 = no owner.
-- Dates are YYMMDDHHMM in a DWORD (Help::ConvertCTimeToDate). Since 2022 that is above the int range, so the
-- int columns hold the wrapped value; the server reads the same bits back as a DWORD.
-- Starts on the last Monday 03:00 and runs next_tournament_hour (336) hours, like sp2_tournament_regular.ini.
USE [LosaGame]
GO
IF NOT EXISTS (SELECT 1 FROM dbo.userLeagueListDB WHERE leagueType = 1)
BEGIN
DECLARE @s datetime, @e datetime, @a bigint, @b bigint
SET @s = DATEADD(hour, 3, DATEADD(day, -(DATEDIFF(day, 0, GETDATE()) % 7), DATEDIFF(day, 0, GETDATE())))
SET @e = DATEADD(hour, 336, @s)
SET @a = CAST(YEAR(@s) % 100 AS bigint) * 100000000 + MONTH(@s) * 1000000 + DAY(@s) * 10000 + DATEPART(hour, @s) * 100
SET @b = CAST(YEAR(@e) % 100 AS bigint) * 100000000 + MONTH(@e) * 1000000 + DAY(@e) * 10000 + DATEPART(hour, @e) * 100
IF @a > 2147483647 SET @a = @a - 4294967296
IF @b > 2147483647 SET @b = @b - 4294967296
INSERT INTO dbo.userLeagueListDB (accountIDX, startDate, endDate, leagueType, leagueState, regDate)
VALUES (0, @a, @b, 1, 1, GETDATE())
END
SELECT idx, startDate, endDate, leagueType, leagueState FROM dbo.userLeagueListDB
GO
+212
View File
@@ -0,0 +1,212 @@
# LosaDev changes to the 2019 source
This snapshot is a copy of the 2019 source (213 heroes, `213LSK`). Every change against the original tree is listed here. All edits were made byte-safe (the sources are CP949): only the listed text was replaced, line endings were kept, and every other file is byte-identical to the original (checked by SHA-256 on 2026-11-07: 20 269 identical, 327 changed (including the new `.gitignore` and the host-name pass below), 0 added apart from the LosaDev files at the root).
## 1. What was left out of the copy
- Build output: `Debug\`, `Release\`, `x64\`, `Shipping*\`, `ipch\`, and `*.obj`, `*.pch`, `*.ipch`, `*.sdf`, `*.opensdf`, `*.suo`, `*.user`, `*.ncb`, `*.aps`, `*.tlog`, `*.pdb`, `*.ilk`, `*.idb`, `*.sbr`, `*.bsc`, `*.cod`, `*.lastbuildstate`, `*.unsuccessfulbuild`.
- IDE and VCS folders: `.vs\`, `.git\` (the old repository history, 450 MB), and the previous owner's `.gitignore` (it ignored every `bin\` folder, which holds needed libraries). A new `.gitignore` is at the root.
Third-party libraries (`lib\`, `extra\lib\`, `extra\include\`, `etc\Library\`, wxWidgets, Bullet, gperftools, ziparchive, the anti-cheat SDKs) are kept as they were. Exception: the vendor SDK binaries listed under "Vendor SDK binaries removed" below.
## 2. Build fixes
| File | Change | Why |
|---|---|---|
| `src\ls_relaysvr\Manager.cpp` | `g_UDPNode()->InitMemory(3000,16384*2,6000,6000,1000);` became `InitMemory(3000,16384*2,6000/*,6000,1000*/);` | `C2661`: `UDPNode` (source in `src\iocpSocketDLL` and the prebuilt `lib\iocpSocketDLL.lib`) only has 3- and 7-argument overloads; no 5-argument version exists anywhere in the tree. The 2014 relay server has exactly this line, so the 3-argument call (`packetCount = 6000`) is the original developers' own fix. |
| `win\projects\LogDLL.vcxproj`, `win\projects\FrameTimerDLL.vcxproj` | Each post-build `copy ... ..\..\build\zone_office\<server>\` line now starts with `if exist "<that folder>\"` | The copy failed when the `zone_office` folders did not exist, which failed the build. The DLL itself was always fine. |
| `src\ioFreeType\StdAfx.h` | `#pragma comment(lib, "../LSLog/bin/LSLog.lib")` (and `LSLogd.lib`) now point at `../../lib/` | `LNK1104`: `LSLog` builds into `lib\`; `src\LSLog\bin\` does not exist in this release. |
## 3. Secrets and personal data replaced
Placeholders: `127.0.0.1` for addresses the code connects to, `192.0.2.1` (a reserved documentation address that never matches a real host) where the code compares the server's own IP against a fixed list, and `CHANGE_ME` for keys, passwords, tokens and account names. Private network addresses (`10.x`, `172.16-31.x`, `192.168.x`) were left as they are.
| File | Replaced |
|---|---|
| `extra/LS_Monitor/LS_Monitor/config.ini` | 10 public IP(s) |
| `extra/LS_MonitorClient/Bin/config.ini` | 4 public IP(s) |
| `extra/LS_MonitorClient/LS_MonitorClient/config.ini` | 10 public IP(s) |
| `extra/LS_Service/bin/server.txt` | 1 public IP(s) |
| `extra/testNXShop/testCode/cTestThread.cpp` | 1 public IP(s) |
| `extra/testNXShop/testCode/testCode.cpp` | 1 public IP(s) |
| `sql/20120504/lostsaga_sp.sql` | 1 public IP(s) |
| `src/BillingRelayServer/billingrelayserverinfo.ini` | 1 public IP(s) |
| `src/BillingRelayServer/Channeling/ioChannelingNodeDaum.cpp` | 1 public IP(s) |
| `src/BillingRelayServer/Channeling/ioChannelingNodeWemadeBuy.cpp` | 1 public IP(s), billing session value |
| `src/BillingRelayServer/ipg/sample/asp/ipg_cli_input.asp` | e-mail address |
| `src/BillingRelayServer/Local/ioLocalIndonesia.cpp` | 2 public IP(s) |
| `src/BillingRelayServer/Local/ioLocalTaiwan.cpp` | player account id |
| `src/BillingRelayServer/Local/ioLocalThailand.cpp` | 10 public IP(s) |
| `src/ErrorDlg/ErrorDlg/ErrorDlg.vcxproj` | developer user folder (post-build now copies `$(TargetPath)`) |
| `src/ErrorDlg/ErrorDlg/HackShield/ioHackShield.cpp` | 1 public IP(s) |
| `src/ls_billingsvr/Channeling/ioChannelingNodeDaum.cpp` | 1 public IP(s) |
| `src/ls_billingsvr/Channeling/ioChannelingNodeWemadeBuy.cpp` | 1 public IP(s), billing session value |
| `src/ls_billingsvr/Channeling/ioChannelingNodeWemadeCashLink.cpp` | 1 public IP(s), billing session value |
| `src/ls_billingsvr/Local/ioLocalBrazil.cpp` | publisher hash key |
| `src/ls_billingsvr/Local/ioLocalEU.cpp` | 1 public IP(s) |
| `src/ls_billingsvr/Local/ioLocalIndonesia.cpp` | 2 public IP(s) |
| `src/ls_billingsvr/Local/ioLocalLatin.cpp` | 2 public IP(s) |
| `src/ls_billingsvr/Local/ioLocalSA.cpp` | 6 public IP(s) |
| `src/ls_billingsvr/Local/ioLocalThailand.cpp` | 10 public IP(s) |
| `src/ls_billingsvr/Local/ioLocalUS.cpp` | publisher app id, test account + password, publisher hash key |
| `src/ls_gamesvr/MainProcess.cpp` | 2 public IP(s) (2 in address comparisons -> 192.0.2.1) |
| `src/ls_gamesvr/NodeInfo/LicenseManager.h` | 1 public IP(s) |
| `src/ls_gamesvr/Xtrap/XTrap4Server.cpp` | 3 public IP(s) (1 in address comparisons -> 192.0.2.1) |
| `src/ls_mainsvr/MainProcess.cpp` | 2 public IP(s) (2 in address comparisons -> 192.0.2.1) |
| `src/LSAutoUpgrade/_참고/ls.asp` | SQL connection string (host, login, password) |
| `src/LSAutoUpgrade/AutoUpgradeDlg.cpp` | login token |
| `src/LSAutoUpgrade/ioLoginDlg.cpp` | 1 public IP(s) |
| `src/LSAutoUpgrade/Xtrap/ioXtrap.cpp` | XTrap license id(s) |
| `src/LSClient/config/debug_connect.ini` | login token |
| `src/LSClient/Login.cpp` | login token |
| `src/LSClient/XignCode/ioXignCode.cpp` | XignCode license key |
| `src/LSClient/Xtrap/ioXtrap.cpp` | XTrap license id(s) |
| `src/LSClientMT/config/debug_connect.ini` | login token |
| `src/LSClientMT/Login.cpp` | login token |
| `src/LSClientMT/XignCode/ioXignCode.cpp` | XignCode license key |
| `src/LSClientMT/Xtrap/ioXtrap.cpp` | XTrap license id(s) |
| `src/LSMonitor/LSMonitorDlg.cpp` | LSMonitor login password |
| `src/LSWebBroker/_CMD.txt` | login token |
| `src/LSWebBroker/Local/ioLocalBrazil.cpp` | login token |
| `src/LSWebBroker/Local/ioLocalEU.cpp` | login token |
| `src/LSWebBroker/Local/ioLocalLatin.cpp` | login token |
| `src/LSWebBroker/Local/ioLocalUS.cpp` | login token |
| `src/MainServer/Window.cpp` | 2 public IP(s) (2 in address comparisons -> 192.0.2.1) |
| `src/PatchManager/PatchManager.cpp` | 1 public IP(s) |
| `src/SP2LostSagaGameServer/NodeInfo/LicenseManager.h` | 1 public IP(s) |
| `src/SP2LostSagaGameServer/Window.cpp` | 1 public IP(s) (1 in address comparisons -> 192.0.2.1) |
The anti-cheat license strings (XTrap, XignCode) are only used by the Shipping configurations with those SDKs; Debug and Release do not use them.
## 4. Left in place on purpose
These are part of the game itself and are needed to read its data or talk to the client:
- Pack (`.iop`) passwords per country in `src\io3DEngine\ioLocalManagerParent.cpp` (stored encoded, with the plain text in comments), repeated in the `PatchManager`, `PatchManagerOld`, `LSAutoUpgrade` and `ErrorDlg` copies of the local managers.
- `WEB_UDP_KEY_VALUE` in `src\ls_gamesvr\NodeInfo\UserNodeManager.h` and the check key `EDEW3940FVDP4950` in the launcher command-line notes.
- Packet and DB password encoding in `iocpSocketDLL` and `ls_dbagent` (`ls_dbagent.exe -x`).
- Copyright and author e-mail addresses in third-party code and `.rc` version blocks.
## 5. Build test
Copied to a scratch folder and built on 2026-11-07 in **Release|Win32** with the v100 toolset (VS2010, via VS2022 MSBuild), `Version.h` created next to every `TSvnVersion.tmpl`, the TortoiseSVN pre-build step disabled and static-runtime Boost:
| Solution | Result |
|---|---|
| `ioINILoader`, `Log`, `LogDLL`, `FrameTimerDLL`, `iocpSocketDLL`, `LSLog`, `SharedContainer`, `PerfMon`, `TownPortal`, `ioFreeType` | Build |
| `io3DEngine` | Builds |
| `ls_dbagent`, `ls_mainsvr`, `ls_billingsvr`, `ls_gamesvr`, `ls_relaysvr`, `ls_loginsvr`, `ls_filewritesvr` | Build |
| `LSClient` | Builds `LostSaga.exe` |
| `ioPac` | Builds (Release, 0 errors) after the BigPac fix in "ioPac BigPac fix" below. Before the fix `BigPac.cpp` used members that `BigPac.h` did not declare. |
## Publisher and operator host names (added 2026-11-07)
Owner decision: no real publisher, operator or game-service host names in the repository. Every such host was replaced in text files (same byte-safe method as above, CP949 as Latin-1, UTF-16 `.sql` only when lossless, line endings kept):
- a URL `scheme://host[:port]/path` became `http://127.0.0.1/path` (the path is kept, the port dropped);
- a bare host name became `example.invalid`;
- e-mail addresses at the developer's and publisher's own domains (`@ioenter.com`, `@nexon.co.kr`) became `@example.invalid` (the part before `@` is kept). Files: `src/BillingRelayServer/Local/ioLocalTaiwan.cpp` (10), `src/BillingRelayServer/Local/ioLocalUS.cpp` (10), `src/ls_billingsvr/Local/ioLocalEU.cpp` (9), `src/ls_billingsvr/Local/ioLocalUS.cpp` (9), `src/ls_gamesvr/Channeling/ioChannelingNodeNexonBuy.cpp` (1).
2313 replacements in 279 files, 74 hosts. Hosts (number of replacements): `nxsoap.nexon.com` (1421), `testsoap.nexon.com` (703), `www.lostsaga.com` (13), `lostsaga.com` (12), `billingws.gamon.net` (12), `forum.gemscool.com` (7), `lostsaga.ogplanet.com` (7), `nxpay.nexon.com` (7), `billlosatest.wemade.com` (6), `secure3.asiasoft.co.th` (5), `www.lostsaga.jp` (5), `www.gemscool.com` (4), `cdn.lostsaga.z8games.com` (4), `www.playone.asia` (4), `www.lostsaga.in.th` (4), `www.gamon.net` (4), `images.z8games.com` (4), `ls.garena.in.th` (4), `lostsaga.gamon.net` (4), `profile.playcybergames.com` (4), `www.z8games.com` (3), `lostsaga.z8games.com` (3), `games.playpark.com` (3), `www.gameclub.ph` (3), `platform.garena.tw` (2), `cabinet.ogplanet.com` (2), `patch.lostsaga.com.tw` (2), `lostsaga.gemscool.com` (2), `na-qa.launcher.z8games.com` (2), `en.lostsaga.nexoneu.com` (2), `passport.nexoneu.com` (2), `test.bill.daum.net` (2), `losa.nexon.com` (2), `www.daum.net` (2), `authen.playpark.net` (2), `cdn.lostsaga.com` (2), `www.nxcreative.co.kr` (2), `support.z8games.com` (2), `download.lostsaga.com` (2), `search.daum.net` (2), `qa-happycode.mangot5.com` (2), `ripay.nexon.com` (1), `ripay-test.nexon.com` (1), `api.z8games.com` (1), `doc.valofe.com` (1), `app.z8games.com` (1), `alpha.lostsaga-tw.valofe.com` (1), `beta.lostsaga-tw.valofe.com` (1), `lostsaga.nefficient.co.kr` (1), `lostsaga-tw.valofe.com` (1), `network.adsmarket.com` (1), `aspdll.xonda.net` (1), `www.lostsaga.ph` (1), `beta.www.lostsaga.com` (1), `start.tiara.daum.net` (1), `citystat.playone.asia` (1), `game.playpark.com` (1), `my.playpark.com` (1), `www.playpark.com` (1), `billing.ogplanet.com` (1), `apis-test.nexon.com` (1), `api.ogplanet.com` (1), `lostsaga.wemadeusa.com` (1), `alpha.api.bill.naver.com` (1), `www.softnyx.com` (1), `tr.lostsaga.nexoneu.com` (1), `ls.gameclub.ph` (1), `lostsaga.garena.tw` (1), `vfun.valofe.com` (1), `de.lostsaga.nexoneu.com` (1), `support.lostsaga.nexoneu.com` (1), `fr.lostsaga.nexoneu.com` (1), `pl.lostsaga.nexoneu.com` (1), `it.lostsaga.nexoneu.com` (1).
| Folder | Files | Replacements | Hosts |
|---|---|---|---|
| `extra/LS_NXSoap/LS_NXSoap/` | 66 | 657 | nxsoap.nexon.com |
| `extra/LS_NXSoap/NEXON_live/` | 72 | 764 | nxsoap.nexon.com |
| `extra/LS_NXSoap/NEXON_testnx/` | 66 | 703 | testsoap.nexon.com |
| `extra/testHTTP/testCode/` | 1 | 1 | apis-test.nexon.com |
| `src/BillingRelayServer/` | 1 | 3 | alpha.api.bill.naver.com, api.ogplanet.com, billing.ogplanet.com |
| `src/BillingRelayServer/Channeling/` | 2 | 3 | billlosatest.wemade.com, test.bill.daum.net |
| `src/BillingRelayServer/Local/` | 1 | 16 | billingws.gamon.net, www.gamon.net |
| `src/ErrorDlg/ErrorDlg/` | 7 | 8 | forum.gemscool.com, games.playpark.com, lostsaga.gamon.net, lostsaga.wemadeusa.com, www.lostsaga.com, www.lostsaga.in.th, www.lostsaga.jp |
| `src/ls_billingsvr/Channeling/` | 4 | 7 | billlosatest.wemade.com, qa-happycode.mangot5.com, test.bill.daum.net |
| `src/ls_billingsvr/Local/` | 2 | 3 | api.z8games.com, app.z8games.com, network.adsmarket.com |
| `src/ls_gamesvr/Channeling/` | 3 | 8 | doc.valofe.com, losa.nexon.com, nxpay.nexon.com, ripay.nexon.com, ripay-test.nexon.com |
| `src/LSAutoUpgrade/` | 4 | 25 | authen.playpark.net, cdn.lostsaga.com, cdn.lostsaga.z8games.com, citystat.playone.asia, game.playpark.com, my.playpark.com, profile.playcybergames.com, search.daum.net, secure3.asiasoft.co.th, start.tiara.daum.net, www.daum.net, www.nxcreative.co.kr, www.playpark.com |
| `src/LSAutoUpgrade/_참고/` | 2 | 4 | cabinet.ogplanet.com, patch.lostsaga.com.tw |
| `src/LSAutoUpgrade/Local/` | 12 | 50 | cdn.lostsaga.z8games.com, de.lostsaga.nexoneu.com, en.lostsaga.nexoneu.com, forum.gemscool.com, fr.lostsaga.nexoneu.com, images.z8games.com, it.lostsaga.nexoneu.com, lostsaga.garena.tw, lostsaga.gemscool.com, lostsaga.z8games.com, ls.gameclub.ph, ls.garena.in.th, passport.nexoneu.com, pl.lostsaga.nexoneu.com, platform.garena.tw, support.lostsaga.nexoneu.com, support.z8games.com, tr.lostsaga.nexoneu.com, vfun.valofe.com, www.gameclub.ph, www.gemscool.com, www.lostsaga.com, www.lostsaga.jp, www.playone.asia, www.softnyx.com, www.z8games.com |
| `src/LSClient/` | 3 | 13 | lostsaga.com, nxpay.nexon.com |
| `src/LSClient/Local/` | 7 | 8 | forum.gemscool.com, games.playpark.com, lostsaga.gamon.net, lostsaga.ogplanet.com, www.lostsaga.com, www.lostsaga.in.th, www.lostsaga.jp |
| `src/LSClientMT/` | 2 | 2 | nxpay.nexon.com |
| `src/LSClientMT/Local/` | 7 | 8 | forum.gemscool.com, games.playpark.com, lostsaga.gamon.net, lostsaga.ogplanet.com, www.lostsaga.com, www.lostsaga.in.th, www.lostsaga.jp |
| `src/LSMonitor/Sms/` | 2 | 2 | aspdll.xonda.net, lostsaga.com |
| `src/LSWebBroker/` | 3 | 7 | download.lostsaga.com, lostsaga.nefficient.co.kr, www.lostsaga.com |
| `src/LSWebBroker/Local/` | 12 | 21 | alpha.lostsaga-tw.valofe.com, beta.lostsaga-tw.valofe.com, beta.www.lostsaga.com, cdn.lostsaga.z8games.com, forum.gemscool.com, lostsaga.gamon.net, lostsaga.ogplanet.com, lostsaga-tw.valofe.com, na-qa.launcher.z8games.com, www.lostsaga.com, www.lostsaga.in.th, www.lostsaga.jp, www.lostsaga.ph |
Binary files, patched only with same-length replacements (`nxsoap.nexon.com` -> `xexample.invalid`, `testsoap.nexon.com` -> `xxxexample.invalid`, and so on, so sizes and offsets do not change):
- `extra\lib\`: `LS_NXSoap.lib`, `LS_NXSoapD.lib`, `LS_NXSoapTEST.lib`, `LS_NXSoapTESTD.lib`. The SOAP namespace and endpoint strings inside the libraries now use the padded `.invalid` names.
- Vendor documents `src\BillingRelayServer\OGPDocument\1. IOEntertainment.doc`, `4. installer package components.doc` (OGPlanet hosts) and `src\LSMonitor\Sms\Xonda_net_SMSWS_v1.0.doc` (SMS service host).
Left on purpose (not publisher or game-service hosts): standards and XML namespaces (`www.w3.org`, `schemas.microsoft.com`, `schemas.xmlsoap.org`), homepages and documentation links of third-party libraries and their authors (Bullet, ZipArchive, OPCODE, Lua, TinyXML, Ogg Vorbis, wxWidgets, gperftools, OpenSSL, libcurl and others), copyright lines that name a company without a host (Wellbia, INCA, Bandisoft), `api.ipify.org` (public IP lookup used by the launcher), `www.google-analytics.com` (the analytics collector; the tracking id comes from config), the Steam SDK headers (`store.steampowered.com`, `www.steamgames.com`), and the vendor addresses inside third-party binaries listed above in section "Left in place on purpose".
## Local run fixes (added 2026-11-07)
Found while running this source on one local PC. Byte patches, line endings kept.
| File | Change | Why |
|---|---|---|
| `src\ls_gamesvr\Local\ioLocalParent.cpp`, `src\LSClient\Local\ioLocalParent.cpp` | `IsRightLicense()` no longer compares the date (`if( iDate >= GetLicenseDate() ) return false;` replaced by `(void)iDate;`) | The Indonesia license dates (server 2013-12-31, client 2012-11-30) have passed: the game server exited with "This program has expired", the client showed "Your license has com up for renewal.". |
| `src\ls_billingsvr\LoginManager\LoginManager.cpp` | In `CheckLogin()`, the Indonesia `TestMode` success branch moved before the `pInfo == NULL` check | Without the launcher nobody fills the login list, so every TestMode login failed. |
| `src\ls_gamesvr\NodeInfo\UserNodeManager.cpp` | The two `__OHTG_LOGIN_IP_CHECK__` comparisons in `OnResultSelectUserLoginInfo()` are skipped when `szTestIP` is empty | The Indonesia locale never decrypts an IP key, so the check always failed (`USER IP NOT2`). |
| `src\ls_mainsvr\MainProcess.cpp` | The `MessageBox` "Local IP Error." became a log line | A server started without a window would wait on the dialog for ever. |
## Client text (added 2026-11-07)
`SafeSprintf` and the printers built on it have two paths. Korea uses `printf` (`%s %d`), every other locale uses `FormatMessage` (`%1 %2`). This repository is set up for the Indonesia client:
| Files | Change | Why |
|---|---|---|
| 193 `.cpp` files in `src\LSClient` | 841 literal formats of `AddTextPiece`, `PrintText`, `PrintTextWidthCut`, `SetMsgBox`, `SafeSprintf` and related calls changed from `%s %d %u %I64d` to `%1 %2` | They printed as raw text outside Korea. |
| The same files | 2 556 Korean literals inside functions became `STR(n)` | Text belongs in the text tables. The rows are added to `resource/text/text_id.txt` in the client download, in Korean until translated. Left as they are: string comparisons, `_e` macros and literals outside functions. |
| `src\io3DEngine\Safesprintf.cpp` | New `FormatPrintfStyle()` | `%02d` and `%.2f` cannot be written as `%1`; they are formatted from the argument strings. |
| `src\io3DEngine\ioXMLElement.cpp` | Child elements inherit the text table setting | `STR(n)` in nested XML, such as `TextBlock`, printed as raw text. |
| `src\LSClient\GUI\EtcItemSlotWnd.cpp`, `GrowthDownSelectWnd.cpp` | Array initializers changed for `STR(n)` | `STR` returns a pointer. |
**Side effect:** in the Korea locale these literals now print `%1`. To run Korea, use the original format strings or add a table for that locale.
## Bug fixes (added 2026-11-07)
| File | Change | Why |
|---|---|---|
| `src\LSClient\Setting.cpp` | `LOW_SPEC` and `MINIMUM_SPEC` presets set `m_bUse16bitFrameBuffer = false` | These presets asked for a 16-bit full screen device, which current Windows refuses; the client exited without a window. |
| `db\losadev\losadev-2019-procs.sql` | Procedures the 2019 server calls (`ls_query.ini` ids 1, 136, 137, 139) that no released DB script contains | Login and the DB agent keep-alive failed. |
| `db\losadev\losadev-first-tournament.sql` | First `userLeagueListDB` row | Faction War / LS Cup showed no dates. |
| `server-config\ls_gamesvr\config\` (10 files) | The client's `sp2_deco_*`, `sp2_extraitem_info`, `sp2_gashapon_present`, `sp2_item_price`, `sp2_item_recharge`, `sp2_leader_item`, `sp2_medalitem_info`, `sp2_new_alchemic_info`, `sp2_setitem_info` copied over the server's (same keys) | Shop and gacha lists did not match the client. Copy them over the release's server config. |
| Client download: `xml/myinventoryinfownd.xml` in `rs.iop` | Window IDs changed to the ones in `MyInventoryInfoWnd.h` | My Item buttons were on top of each other. || `src\LSClient\GUI\CostumeCustomWnd.cpp` | The costume skin delete check compares the typed word with `CostumeSkinHapus` instead of the Korean literal | The window asks the player to type `CostumeSkinHapus` (text table), but the code compared a Korean word nobody can type on this client. |
| `server-config\ls_gamesvr\config\sp2_mode_select.ini` | Shuffle Bonus subs 30-32 and Factory subs 2-3 set to `active = 0`, `map_cnt = 0` | The client has no maps for them (black screen). |
## Vendor SDK binaries removed (added 2026-11-07)
No vendor SDK binaries are shared in any LosaDev tier. The source code that uses them stays.
Deleted XTrap libraries/DLLs (13): `src\LSAutoUpgrade\Xtrap\XTrap4Launcher_mt.lib`, `src\LSClient\Xtrap\XTrap4ClientExt1_mtdll.lib`, `src\LSClient\Xtrap\XTrap4Client_ClientPart_mtDll.lib`, `src\LSClient\Xtrap\XTrap4Client_ServerPart_mtDll.lib`, `src\LSClient\Xtrap\XTrap4Client_mtDll.lib`, `src\LSClient\Xtrap\XTrap_Unipher_mtDll.lib`, `src\LSClientMT\Xtrap\XTrap4ClientExt1_mtdll.lib`, `src\LSClientMT\Xtrap\XTrap4Client_ClientPart_mtDll.lib`, `src\LSClientMT\Xtrap\XTrap4Client_ServerPart_mtDll.lib`, `src\LSClientMT\Xtrap\XTrap4Client_mtDll.lib`, `src\LSClientMT\Xtrap\XTrap_Unipher_mtDll.lib`, `src\SP2LostSagaGameServer\Xtrap\XTrap4Server.dll`, `src\ls_gamesvr\Xtrap\XTrap4Server.dll`.
Deleted `bxIPGClient.dll` copies (7): `lib\bxIPGClient.dll`, `src\BillingRelayServer\JapanDLL\bxIPGClient.dll`, `src\BillingRelayServer\bxIPGClient.dll`, `src\BillingRelayServer\ipg\bin\bxIPGClient.dll`, `src\ls_billingsvr\Adbill\bxIPGClient.dll`, `src\ls_billingsvr\JapanDLL\bxIPGClient.dll`, `src\ls_billingsvr\ipg\bin\bxIPGClient.dll`.
`#import "...bxIPGClient.dll" no_namespace` needs the DLL at compile time, so it was replaced by `#include "...bxIPGClient_stub.h"` in:
- `src\BillingRelayServer\Local\ioLocalJapan.cpp`
- `src\ls_billingsvr\Channeling\ioChannelingNodeHappyTuk.cpp`
- `src\ls_billingsvr\Channeling\ioChannelingNodeValofe.cpp`
- `src\ls_billingsvr\Local\ioLocalJapan.cpp`
New stand-in headers: `src\BillingRelayServer\JapanDLL\bxIPGClient_stub.h`, `src\ls_billingsvr\Adbill\bxIPGClient_stub.h`, `src\ls_billingsvr\JapanDLL\bxIPGClient_stub.h`. They declare only what the code calls (`IIPGClient` with `GetCash`, `Output`, `OutputCancel`, `OutputIPG`, and the `IIPGClientPtr` smart pointer). The COM class is never registered, so `CreateInstance` fails, the pointer stays empty and the existing `catch( _com_error )` paths run: the Japan IPG and Adbill billing calls report an error, nothing else changes.
Verified 2026-11-07: `ls_billingsvr` Release|Win32 builds with 0 errors with no `bxIPGClient.dll` present. `BillingRelayServer` gets the same header but was not build-tested.
The XTrap code is only compiled in Shipping configurations with `XTRAP` defined. Those configurations no longer link without the vendor SDK; build Debug or Release.
Script: `vendor-strip.js` (latin1 byte-safe, CRLF kept).
## ioPac BigPac fix (added 2026-11-07)
`src\ioPac\BigPac.cpp` is newer than `BigPac.h` (the header is the 2014 one, byte-identical), so ioPac did not build and the release only worked with the prebuilt `lib\iopac.dll`.
| File | Change |
|---|---|
| `src\ioPac\BigPac.h` | Added `vFileInfo m_vecFileInfo;` next to `m_setFileInfo`, and declarations for the functions the .cpp defines: `OpenBigPacAll`, `GetFileIndexVec`, `AddFile`, `DeleteFiles` (public), `BuildFileInfo`, `ClearFileInfo` (private). Each addition is marked `LosaDev`. |
| `src\ioPac\BigPac.cpp` | `CBigPac::OpenBigPacAll` (IOP Manager only) wrapped in `#ifdef STATIC_PAC_API`, because it calls `BuildFileInfo()`, which is only defined in that block. Without it the DLL build fails to link. |
Verified 2026-11-07: Release|Win32 builds with 0 errors. The new `iopac.dll` (279 040 bytes) exports 71 functions, a superset of the 66 in the prebuilt DLL (none missing). The LosaDev client package ships this rebuilt DLL.
Scripts: `bigpac-header.js`, `bigpac-cpp.js` (latin1 byte-safe, CRLF kept).
+29
View File
@@ -0,0 +1,29 @@
# Lost Saga source, 2019 (213 heroes)
Developer snapshot of the 2019 Lost Saga source (`213LSK`), shared by the LosaDev community for study and private-server development. Access tier: Public.
- Servers, client, engine, launcher (`LSAutoUpgrade`), `LSWebBroker` and tools, with the prebuilt libraries needed to build them.
- Database: base scripts from 2012 in `sql\20120504\` plus dated feature patches (2017 to 2019) in `DB\`.
- No server config set and no `ls_query.ini` yet (see the wiki for a starting point).
- The matching game client (a modified Gemscool Indonesia client, 2019) is a separate download, not in Git.
Layout: solutions in `win\` (server and library projects in `win\projects\`), code in `src\`, libraries in `lib\`, billing-server extras in `extra\`, video/audio SDKs in `etc\Library\`.
## Build
1. Install Visual Studio 2010 SP1 (Professional or higher, toolset v100), the DirectX SDK (June 2010) and Boost 1.47 and 1.50 with static-runtime libraries (`-mt-s`, `-mt-sgd`).
2. Create `Version.h` next to every `TSvnVersion.tmpl` and disable the TortoiseSVN pre-build step, for example:
```bat
MSBuild win\ls_gamesvr.sln /p:Configuration=Release /p:Platform=Win32 /p:PreBuildEventUseInBuild=false
```
3. Build in this order: base libraries, `ioFreeType`/`io3DEngine`, the `ls_*` servers, then `LSClient`. Use **Debug** or **Release**.
Server output goes to `build\zone_dev\` or `build\zone_dist\`, one level above this folder.
Full guide: https://losadev.wiki/guides/before-you-start/ and https://losadev.wiki/guides/source-2019/
## Changes in this snapshot
`PATCHES-LosaDev.md` lists every change against the original tree: the local run fixes (license date off, TestMode login, empty IP key, no modal dialog in the main server), three small build fixes (relay server `InitMemory`, tolerant post-build copies, `ioFreeType` library path) and the secrets that were replaced with placeholders (`CHANGE_ME`, `127.0.0.1`, `192.0.2.1`).
Lost Saga is the property of its original developers and publishers. This snapshot is fan-made, not affiliated with them, and meant for research and learning.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

File diff suppressed because it is too large. Load diff
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 384 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

+187
View File
@@ -0,0 +1,187 @@
xof 0303txt 0032
template VertexDuplicationIndices {
<b8d65549-d7c9-4995-89cf-53a9a8b031e3>
DWORD nIndices;
DWORD nOriginalVertices;
array DWORD indices[nIndices];
}
template FVFData {
<b6e70a0e-8ef9-4e83-94ad-ecc8b0c04897>
DWORD dwFVF;
DWORD nDWords;
array DWORD data[nDWords];
}
template VertexElement {
<f752461c-1e23-48f6-b9f8-8350850f336f>
DWORD Type;
DWORD Method;
DWORD Usage;
DWORD UsageIndex;
}
template DeclData {
<bf22e553-292c-4781-9fea-62bd554bdd93>
DWORD nElements;
array VertexElement Elements[nElements];
DWORD nDWords;
array DWORD data[nDWords];
}
template EffectParamFloats {
<3014b9a0-62f5-478c-9b86-e4ac9f4e418b>
STRING ParamName;
DWORD nFloats;
array FLOAT Floats[nFloats];
}
template EffectParamString {
<1dbc4c88-94c1-46ee-9076-2c28818c9481>
STRING ParamName;
STRING Value;
}
template EffectParamDWord {
<e13963bc-ae51-4c5d-b00f-cfa3a9d97ce5>
STRING ParamName;
DWORD Value;
}
template EffectInstance {
<e331f7e4-0559-4cc2-8e99-1cec1657928f>
STRING EffectFilename;
[...]
}
Mesh {
24;
-0.800000;-0.500000;-0.100000;,
-0.800000;-0.500000;0.100000;,
-0.800000;0.500000;0.100000;,
-0.800000;0.500000;-0.100000;,
-0.800000;0.500000;-0.100000;,
-0.800000;0.500000;0.100000;,
0.800000;0.500000;0.100000;,
0.800000;0.500000;-0.100000;,
0.800000;0.500000;-0.100000;,
0.800000;0.500000;0.100000;,
0.800000;-0.500000;0.100000;,
0.800000;-0.500000;-0.100000;,
-0.800000;-0.500000;0.100000;,
-0.800000;-0.500000;-0.100000;,
0.800000;-0.500000;-0.100000;,
0.800000;-0.500000;0.100000;,
-0.800000;-0.500000;0.100000;,
0.800000;-0.500000;0.100000;,
0.800000;0.500000;0.100000;,
-0.800000;0.500000;0.100000;,
-0.800000;-0.500000;-0.100000;,
-0.800000;0.500000;-0.100000;,
0.800000;0.500000;-0.100000;,
0.800000;-0.500000;-0.100000;;
12;
3;0,1,2;,
3;2,3,0;,
3;4,5,6;,
3;6,7,4;,
3;8,9,10;,
3;10,11,8;,
3;12,13,14;,
3;14,15,12;,
3;16,17,18;,
3;18,19,16;,
3;20,21,22;,
3;22,23,20;;
MeshTextureCoords {
24;
0.000000;1.000000;,
0.000000;0.000000;,
1.000000;0.000000;,
1.000000;1.000000;,
0.000000;1.000000;,
0.000000;0.000000;,
1.000000;0.000000;,
1.000000;1.000000;,
0.000000;1.000000;,
0.000000;0.000000;,
1.000000;0.000000;,
1.000000;1.000000;,
0.000000;1.000000;,
0.000000;0.000000;,
1.000000;0.000000;,
1.000000;1.000000;,
0.000000;1.000000;,
0.000000;0.000000;,
1.000000;0.000000;,
1.000000;1.000000;,
0.000000;1.000000;,
0.000000;0.000000;,
1.000000;0.000000;,
1.000000;1.000000;;
}
MeshMaterialList {
4;
12;
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2,
2;
Material {
1.000000;1.000000;1.000000;1.000000;;
1.000000;
1.000000;1.000000;1.000000;;
0.000000;0.000000;0.000000;;
TextureFilename {
"ground2.bmp";
}
}
Material {
1.000000;1.000000;1.000000;1.000000;;
1.000000;
1.000000;1.000000;1.000000;;
0.000000;0.000000;0.000000;;
TextureFilename {
"env2.bmp";
}
}
Material {
1.000000;1.000000;1.000000;1.000000;;
1.000000;
1.000000;1.000000;1.000000;;
0.000000;0.000000;0.000000;;
TextureFilename {
"ground2.bmp";
}
}
Material {
1.000000;1.000000;1.000000;1.000000;;
1.000000;
1.000000;1.000000;1.000000;;
0.000000;0.000000;0.000000;;
TextureFilename {
"env2.bmp";
}
}
}
}
File diff suppressed because it is too large. Load diff
+282
View File
@@ -0,0 +1,282 @@
xof 0303txt 0032
template VertexDuplicationIndices {
<b8d65549-d7c9-4995-89cf-53a9a8b031e3>
DWORD nIndices;
DWORD nOriginalVertices;
array DWORD indices[nIndices];
}
template FVFData {
<b6e70a0e-8ef9-4e83-94ad-ecc8b0c04897>
DWORD dwFVF;
DWORD nDWords;
array DWORD data[nDWords];
}
template VertexElement {
<f752461c-1e23-48f6-b9f8-8350850f336f>
DWORD Type;
DWORD Method;
DWORD Usage;
DWORD UsageIndex;
}
template DeclData {
<bf22e553-292c-4781-9fea-62bd554bdd93>
DWORD nElements;
array VertexElement Elements[nElements];
DWORD nDWords;
array DWORD data[nDWords];
}
template EffectParamFloats {
<3014b9a0-62f5-478c-9b86-e4ac9f4e418b>
STRING ParamName;
DWORD nFloats;
array FLOAT Floats[nFloats];
}
template EffectParamString {
<1dbc4c88-94c1-46ee-9076-2c28818c9481>
STRING ParamName;
STRING Value;
}
template EffectParamDWord {
<e13963bc-ae51-4c5d-b00f-cfa3a9d97ce5>
STRING ParamName;
DWORD Value;
}
template EffectInstance {
<e331f7e4-0559-4cc2-8e99-1cec1657928f>
STRING EffectFilename;
[...]
}
Mesh {
34;
-6.000000;-3.000000;-6.000000;,
6.000000;-3.000000;-6.000000;,
-6.000000;-3.000000;6.000000;,
6.000000;-3.000000;6.000000;,
-6.000000;-3.000000;-6.000000;,
6.000000;-3.000000;-6.000000;,
-6.000000;2.500000;-6.000000;,
-4.000000;2.500000;-6.000000;,
4.000000;2.500000;-6.000000;,
6.000000;2.500000;-6.000000;,
-4.000000;3.000000;-6.000000;,
4.000000;3.000000;-6.000000;,
-6.000000;-3.000000;6.000000;,
6.000000;-3.000000;6.000000;,
-6.000000;2.500000;6.000000;,
-4.000000;2.500000;6.000000;,
4.000000;2.500000;6.000000;,
6.000000;2.500000;6.000000;,
-4.000000;3.000000;6.000000;,
4.000000;3.000000;6.000000;,
-6.000000;-3.000000;-6.000000;,
-6.000000;2.500000;-6.000000;,
-6.000000;2.500000;-6.000000;,
-4.000000;2.500000;-6.000000;,
4.000000;2.500000;-6.000000;,
6.000000;2.500000;-6.000000;,
-4.000000;3.000000;-6.000000;,
4.000000;3.000000;-6.000000;,
-6.000000;2.500000;6.000000;,
-4.000000;2.500000;6.000000;,
4.000000;2.500000;6.000000;,
6.000000;2.500000;6.000000;,
-4.000000;3.000000;6.000000;,
4.000000;3.000000;6.000000;;
24;
3;0,2,1;,
3;1,2,3;,
3;20,5,21;,
3;21,5,9;,
3;7,8,10;,
3;10,8,11;,
3;4,6,12;,
3;12,6,14;,
3;12,14,13;,
3;13,14,17;,
3;15,18,16;,
3;16,18,19;,
3;13,17,5;,
3;5,17,9;,
3;22,23,28;,
3;28,23,29;,
3;23,26,29;,
3;29,26,32;,
3;26,27,32;,
3;32,27,33;,
3;27,24,33;,
3;33,24,30;,
3;24,25,30;,
3;30,25,31;;
MeshNormals {
34;
0.000000;1.000000;0.000000;,
0.000000;1.000000;0.000000;,
0.000000;1.000000;0.000000;,
0.000000;1.000000;0.000000;,
1.000000;0.000000;0.000000;,
-0.707107;0.000000;0.707107;,
1.000000;0.000000;0.000000;,
0.000000;0.000000;1.000000;,
0.000000;0.000000;1.000000;,
-0.707107;0.000000;0.707107;,
0.000000;0.000000;1.000000;,
0.000000;0.000000;1.000000;,
0.894427;0.000000;-0.447214;,
-0.447214;0.000000;-0.894427;,
0.447214;0.000000;-0.894427;,
0.000000;0.000000;-1.000000;,
0.000000;0.000000;-1.000000;,
-0.894427;0.000000;-0.447214;,
0.000000;0.000000;-1.000000;,
0.000000;0.000000;-1.000000;,
0.000000;0.000000;1.000000;,
0.000000;0.000000;1.000000;,
0.000000;-1.000000;0.000000;,
0.124035;-0.992278;0.000000;,
-0.447214;-0.894427;0.000000;,
0.000000;-1.000000;0.000000;,
0.124035;-0.992278;0.000000;,
-0.031235;-0.999512;0.000000;,
0.000000;-1.000000;0.000000;,
0.447214;-0.894427;0.000000;,
-0.124035;-0.992278;0.000000;,
0.000000;-1.000000;0.000000;,
0.031235;-0.999512;0.000000;,
-0.124035;-0.992278;0.000000;;
24;
3;0,2,1;,
3;1,2,3;,
3;20,5,21;,
3;21,5,9;,
3;7,8,10;,
3;10,8,11;,
3;4,6,12;,
3;12,6,14;,
3;12,14,13;,
3;13,14,17;,
3;15,18,16;,
3;16,18,19;,
3;13,17,5;,
3;5,17,9;,
3;22,23,28;,
3;28,23,29;,
3;23,26,29;,
3;29,26,32;,
3;26,27,32;,
3;32,27,33;,
3;27,24,33;,
3;33,24,30;,
3;24,25,30;,
3;30,25,31;;
}
MeshTextureCoords {
34;
0.000000;0.000000;,
0.000000;2.000000;,
2.000000;0.000000;,
2.000000;2.000000;,
0.000000;1.000000;,
6.000000;1.000000;,
0.000000;0.083333;,
7.666667;0.083333;,
6.333333;0.083333;,
6.000000;0.083333;,
7.666667;0.000000;,
6.333333;0.000000;,
2.000000;1.000000;,
4.000000;1.000000;,
2.000000;0.083333;,
2.333333;0.083333;,
3.666667;0.083333;,
4.000000;0.083333;,
2.333333;0.000000;,
3.666667;0.000000;,
8.000000;1.000000;,
8.000000;0.083333;,
0.000000;0.000000;,
0.333333;0.000000;,
1.833333;0.000000;,
2.166667;0.000000;,
0.416667;0.000000;,
1.750000;0.000000;,
0.000000;2.000000;,
0.333333;2.000000;,
1.833333;2.000000;,
2.166667;2.000000;,
0.416667;2.000000;,
1.750000;2.000000;;
}
MeshMaterialList {
3;
24;
0,
0,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2;
Material {
1.000000;1.000000;1.000000;1.000000;;
1.000000;
1.000000;1.000000;1.000000;;
0.000000;0.000000;0.000000;;
TextureFilename {
"ground2.bmp";
}
}
Material {
1.000000;1.000000;1.000000;1.000000;;
1.000000;
1.000000;1.000000;1.000000;;
0.000000;0.000000;0.000000;;
TextureFilename {
"env2.bmp";
}
}
Material {
1.000000;1.000000;1.000000;1.000000;;
1.000000;
1.000000;1.000000;1.000000;;
0.000000;0.000000;0.000000;;
TextureFilename {
"seafloor.bmp";
}
}
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

+280
View File
@@ -0,0 +1,280 @@
//-----------------------------------------------------------------------------
// File: ShadowMap.fx
//
// Desc: Effect file for high dynamic range cube mapping sample.
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
#define SMAP_SIZE 512
#define SHADOW_EPSILON 0.00005f
float4x4 g_mWorldView;
float4x4 g_mProj;
float4x4 g_mViewToLightProj; // Transform from view space to light projection space
float4 g_vMaterial;
texture g_txScene;
texture g_txShadow;
float3 g_vLightPos; // Light position in view space
float3 g_vLightDir; // Light direction in view space
float4 g_vLightDiffuse = float4( 1.0f, 1.0f, 1.0f, 1.0f ); // Light diffuse color
float4 g_vLightAmbient = float4( 0.3f, 0.3f, 0.3f, 1.0f ); // Use an ambient light of 0.3
float g_fCosTheta; // Cosine of theta of the spot light
sampler2D g_samScene =
sampler_state
{
Texture = <g_txScene>;
MinFilter = Point;
MagFilter = Linear;
MipFilter = Linear;
};
sampler2D g_samShadow =
sampler_state
{
Texture = <g_txShadow>;
MinFilter = Point;
MagFilter = Point;
MipFilter = Point;
AddressU = Clamp;
AddressV = Clamp;
};
//-----------------------------------------------------------------------------
// Vertex Shader: VertScene
// Desc: Process vertex for scene
//-----------------------------------------------------------------------------
void VertScene( float4 iPos : POSITION,
float3 iNormal : NORMAL,
float2 iTex : TEXCOORD0,
out float4 oPos : POSITION,
out float2 Tex : TEXCOORD0,
out float4 vPos : TEXCOORD1,
out float3 vNormal : TEXCOORD2,
out float4 vPosLight : TEXCOORD3 )
{
//
// Transform position to view space
//
vPos = mul( iPos, g_mWorldView );
//
// Transform to screen coord
//
oPos = mul( vPos, g_mProj );
//
// Compute view space normal
//
vNormal = mul( iNormal, (float3x3)g_mWorldView );
//
// Propagate texture coord
//
Tex = iTex;
//
// Transform the position to light projection space, or the
// projection space as if the camera is looking out from
// the spotlight.
//
vPosLight = mul( vPos, g_mViewToLightProj );
}
//-----------------------------------------------------------------------------
// Pixel Shader: PixScene
// Desc: Process pixel (do per-pixel lighting) for enabled scene
//-----------------------------------------------------------------------------
float4 PixScene( float2 Tex : TEXCOORD0,
float4 vPos : TEXCOORD1,
float3 vNormal : TEXCOORD2,
float4 vPosLight : TEXCOORD3 ) : COLOR
{
float4 Diffuse;
// vLight is the unit vector from the light to this pixel
float3 vLight = normalize( float3( vPos - g_vLightPos ) );
// Compute diffuse from the light
if( dot( vLight, g_vLightDir ) > g_fCosTheta ) // Light must face the pixel (within Theta)
{
// Pixel is in lit area. Find out if it's
// in shadow using 2x2 percentage closest filtering
//transform from RT space to texture space.
float2 ShadowTexC = 0.5 * vPosLight.xy / vPosLight.w + float2( 0.5, 0.5 );
ShadowTexC.y = 1.0f - ShadowTexC.y;
// transform to texel space
float2 texelpos = SMAP_SIZE * ShadowTexC;
// Determine the lerp amounts
float2 lerps = frac( texelpos );
//read in bilerp stamp, doing the shadow checks
float sourcevals[4];
sourcevals[0] = (tex2D( g_samShadow, ShadowTexC ) + SHADOW_EPSILON < vPosLight.z / vPosLight.w)? 0.0f: 1.0f;
sourcevals[1] = (tex2D( g_samShadow, ShadowTexC + float2(1.0/SMAP_SIZE, 0) ) + SHADOW_EPSILON < vPosLight.z / vPosLight.w)? 0.0f: 1.0f;
sourcevals[2] = (tex2D( g_samShadow, ShadowTexC + float2(0, 1.0/SMAP_SIZE) ) + SHADOW_EPSILON < vPosLight.z / vPosLight.w)? 0.0f: 1.0f;
sourcevals[3] = (tex2D( g_samShadow, ShadowTexC + float2(1.0/SMAP_SIZE, 1.0/SMAP_SIZE) ) + SHADOW_EPSILON < vPosLight.z / vPosLight.w)? 0.0f: 1.0f;
// lerp between the shadow values to calculate our light amount
float LightAmount = lerp( lerp( sourcevals[0], sourcevals[1], lerps.x ),
lerp( sourcevals[2], sourcevals[3], lerps.x ),
lerps.y );
// Light it
Diffuse = ( saturate( dot( -vLight, normalize( vNormal ) ) ) * LightAmount * ( 1 - g_vLightAmbient ) + g_vLightAmbient )
* g_vMaterial;
} else
{
Diffuse = g_vLightAmbient * g_vMaterial;
}
return tex2D( g_samScene, Tex ) * Diffuse;
}
//-----------------------------------------------------------------------------
// Vertex Shader: VertLight
// Desc: Process vertex for the light object
//-----------------------------------------------------------------------------
void VertLight( float4 iPos : POSITION,
float3 iNormal : NORMAL,
float2 iTex : TEXCOORD0,
out float4 oPos : POSITION,
out float2 Tex : TEXCOORD0 )
{
//
// Transform position to view space
//
oPos = mul( iPos, g_mWorldView );
//
// Transform to screen coord
//
oPos = mul( oPos, g_mProj );
//
// Propagate texture coord
//
Tex = iTex;
}
//-----------------------------------------------------------------------------
// Pixel Shader: PixLight
// Desc: Process pixel for the light object
//-----------------------------------------------------------------------------
float4 PixLight( float2 Tex : TEXCOORD0,
float4 vPos : TEXCOORD1 ) : COLOR
{
return tex2D( g_samScene, Tex );
}
//-----------------------------------------------------------------------------
// Vertex Shader: VertShadow
// Desc: Process vertex for the shadow map
//-----------------------------------------------------------------------------
void VertShadow( float4 Pos : POSITION,
float3 Normal : NORMAL,
out float4 oPos : POSITION,
out float2 Depth : TEXCOORD0 )
{
//
// Compute the projected coordinates
//
oPos = mul( Pos, g_mWorldView );
oPos = mul( oPos, g_mProj );
//
// Store z and w in our spare texcoord
//
Depth.xy = oPos.zw;
}
//-----------------------------------------------------------------------------
// Pixel Shader: PixShadow
// Desc: Process pixel for the shadow map
//-----------------------------------------------------------------------------
void PixShadow( float2 Depth : TEXCOORD0,
out float4 Color : COLOR )
{
//
// Depth is z / w
//
Color = Depth.x / Depth.y;
}
//-----------------------------------------------------------------------------
// Technique: RenderScene
// Desc: Renders scene objects
//-----------------------------------------------------------------------------
technique RenderScene
{
pass p0
{
VertexShader = compile vs_1_1 VertScene();
PixelShader = compile ps_2_0 PixScene();
}
}
//-----------------------------------------------------------------------------
// Technique: RenderLight
// Desc: Renders the light object
//-----------------------------------------------------------------------------
technique RenderLight
{
pass p0
{
VertexShader = compile vs_1_1 VertLight();
PixelShader = compile ps_1_1 PixLight();
}
}
//-----------------------------------------------------------------------------
// Technique: RenderShadow
// Desc: Renders the shadow map
//-----------------------------------------------------------------------------
technique RenderShadow
{
pass p0
{
VertexShader = compile vs_1_1 VertShadow();
PixelShader = compile ps_2_0 PixShadow();
}
}
+280
View File
@@ -0,0 +1,280 @@
//-----------------------------------------------------------------------------
// File: ShadowMap.fx
//
// Desc: Effect file for high dynamic range cube mapping sample.
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
#define SMAP_SIZE 512
#define SHADOW_EPSILON 0.00005f
float4x4 g_mWorldView;
float4x4 g_mProj;
float4x4 g_mViewToLightProj; // Transform from view space to light projection space
float4 g_vMaterial;
texture g_txScene;
texture g_txShadow;
float3 g_vLightPos; // Light position in view space
float3 g_vLightDir; // Light direction in view space
float4 g_vLightDiffuse = float4( 1.0f, 1.0f, 1.0f, 1.0f ); // Light diffuse color
float4 g_vLightAmbient = float4( 0.3f, 0.3f, 0.3f, 1.0f ); // Use an ambient light of 0.3
float g_fCosTheta; // Cosine of theta of the spot light
sampler2D g_samScene =
sampler_state
{
Texture = <g_txScene>;
MinFilter = Point;
MagFilter = Linear;
MipFilter = Linear;
};
sampler2D g_samShadow =
sampler_state
{
Texture = <g_txShadow>;
MinFilter = Point;
MagFilter = Point;
MipFilter = Point;
AddressU = Clamp;
AddressV = Clamp;
};
//-----------------------------------------------------------------------------
// Vertex Shader: VertScene
// Desc: Process vertex for scene
//-----------------------------------------------------------------------------
void VertScene( float4 iPos : POSITION,
float3 iNormal : NORMAL,
float2 iTex : TEXCOORD0,
out float4 oPos : POSITION,
out float2 Tex : TEXCOORD0,
out float4 vPos : TEXCOORD1,
out float3 vNormal : TEXCOORD2,
out float4 vPosLight : TEXCOORD3 )
{
//
// Transform position to view space
//
vPos = mul( iPos, g_mWorldView );
//
// Transform to screen coord
//
oPos = mul( vPos, g_mProj );
//
// Compute view space normal
//
vNormal = mul( iNormal, (float3x3)g_mWorldView );
//
// Propagate texture coord
//
Tex = iTex;
//
// Transform the position to light projection space, or the
// projection space as if the camera is looking out from
// the spotlight.
//
vPosLight = mul( vPos, g_mViewToLightProj );
}
//-----------------------------------------------------------------------------
// Pixel Shader: PixScene
// Desc: Process pixel (do per-pixel lighting) for enabled scene
//-----------------------------------------------------------------------------
float4 PixScene( float2 Tex : TEXCOORD0,
float4 vPos : TEXCOORD1,
float3 vNormal : TEXCOORD2,
float4 vPosLight : TEXCOORD3 ) : COLOR
{
float4 Diffuse;
// vLight is the unit vector from the light to this pixel
float3 vLight = normalize( float3( vPos - g_vLightPos ) );
// Compute diffuse from the light
if( dot( vLight, g_vLightDir ) > g_fCosTheta ) // Light must face the pixel (within Theta)
{
// Pixel is in lit area. Find out if it's
// in shadow using 2x2 percentage closest filtering
//transform from RT space to texture space.
float2 ShadowTexC = 0.5 * vPosLight.xy / vPosLight.w + float2( 0.5, 0.5 );
ShadowTexC.y = 1.0f - ShadowTexC.y;
// transform to texel space
float2 texelpos = SMAP_SIZE * ShadowTexC;
// Determine the lerp amounts
float2 lerps = frac( texelpos );
//read in bilerp stamp, doing the shadow checks
float sourcevals[4];
sourcevals[0] = (tex2D( g_samShadow, ShadowTexC ) + SHADOW_EPSILON < vPosLight.z / vPosLight.w)? 0.0f: 1.0f;
sourcevals[1] = (tex2D( g_samShadow, ShadowTexC + float2(1.0/SMAP_SIZE, 0) ) + SHADOW_EPSILON < vPosLight.z / vPosLight.w)? 0.0f: 1.0f;
sourcevals[2] = (tex2D( g_samShadow, ShadowTexC + float2(0, 1.0/SMAP_SIZE) ) + SHADOW_EPSILON < vPosLight.z / vPosLight.w)? 0.0f: 1.0f;
sourcevals[3] = (tex2D( g_samShadow, ShadowTexC + float2(1.0/SMAP_SIZE, 1.0/SMAP_SIZE) ) + SHADOW_EPSILON < vPosLight.z / vPosLight.w)? 0.0f: 1.0f;
// lerp between the shadow values to calculate our light amount
float LightAmount = lerp( lerp( sourcevals[0], sourcevals[1], lerps.x ),
lerp( sourcevals[2], sourcevals[3], lerps.x ),
lerps.y );
// Light it
Diffuse = ( saturate( dot( -vLight, normalize( vNormal ) ) ) * LightAmount * ( 1 - g_vLightAmbient ) + g_vLightAmbient )
* g_vMaterial;
} else
{
Diffuse = g_vLightAmbient * g_vMaterial;
}
return tex2D( g_samScene, Tex ) * Diffuse;
}
//-----------------------------------------------------------------------------
// Vertex Shader: VertLight
// Desc: Process vertex for the light object
//-----------------------------------------------------------------------------
void VertLight( float4 iPos : POSITION,
float3 iNormal : NORMAL,
float2 iTex : TEXCOORD0,
out float4 oPos : POSITION,
out float2 Tex : TEXCOORD0 )
{
//
// Transform position to view space
//
oPos = mul( iPos, g_mWorldView );
//
// Transform to screen coord
//
oPos = mul( oPos, g_mProj );
//
// Propagate texture coord
//
Tex = iTex;
}
//-----------------------------------------------------------------------------
// Pixel Shader: PixLight
// Desc: Process pixel for the light object
//-----------------------------------------------------------------------------
float4 PixLight( float2 Tex : TEXCOORD0,
float4 vPos : TEXCOORD1 ) : COLOR
{
return tex2D( g_samScene, Tex );
}
//-----------------------------------------------------------------------------
// Vertex Shader: VertShadow
// Desc: Process vertex for the shadow map
//-----------------------------------------------------------------------------
void VertShadow( float4 Pos : POSITION,
float3 Normal : NORMAL,
out float4 oPos : POSITION,
out float2 Depth : TEXCOORD0 )
{
//
// Compute the projected coordinates
//
oPos = mul( Pos, g_mWorldView );
oPos = mul( oPos, g_mProj );
//
// Store z and w in our spare texcoord
//
Depth.xy = oPos.zw;
}
//-----------------------------------------------------------------------------
// Pixel Shader: PixShadow
// Desc: Process pixel for the shadow map
//-----------------------------------------------------------------------------
void PixShadow( float2 Depth : TEXCOORD0,
out float4 Color : COLOR )
{
//
// Depth is z / w
//
Color = Depth.x / Depth.y;
}
//-----------------------------------------------------------------------------
// Technique: RenderScene
// Desc: Renders scene objects
//-----------------------------------------------------------------------------
technique RenderScene
{
pass p0
{
VertexShader = compile vs_2_0 VertScene();
PixelShader = compile ps_2_0 PixScene();
}
}
//-----------------------------------------------------------------------------
// Technique: RenderLight
// Desc: Renders the light object
//-----------------------------------------------------------------------------
technique RenderLight
{
pass p0
{
VertexShader = compile vs_2_0 VertLight();
PixelShader = compile ps_2_0 PixLight();
}
}
//-----------------------------------------------------------------------------
// Technique: RenderShadow
// Desc: Renders the shadow map
//-----------------------------------------------------------------------------
technique RenderShadow
{
pass p0
{
VertexShader = compile vs_2_0 VertShadow();
PixelShader = compile ps_2_0 PixShadow();
}
}
File diff suppressed because it is too large. Load diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

+437
View File
@@ -0,0 +1,437 @@
xof 0303txt 0032
template VertexDuplicationIndices {
<b8d65549-d7c9-4995-89cf-53a9a8b031e3>
DWORD nIndices;
DWORD nOriginalVertices;
array DWORD indices[nIndices];
}
template FVFData {
<b6e70a0e-8ef9-4e83-94ad-ecc8b0c04897>
DWORD dwFVF;
DWORD nDWords;
array DWORD data[nDWords];
}
template VertexElement {
<f752461c-1e23-48f6-b9f8-8350850f336f>
DWORD Type;
DWORD Method;
DWORD Usage;
DWORD UsageIndex;
}
template DeclData {
<bf22e553-292c-4781-9fea-62bd554bdd93>
DWORD nElements;
array VertexElement Elements[nElements];
DWORD nDWords;
array DWORD data[nDWords];
}
template EffectParamFloats {
<3014b9a0-62f5-478c-9b86-e4ac9f4e418b>
STRING ParamName;
DWORD nFloats;
array FLOAT Floats[nFloats];
}
template EffectParamString {
<1dbc4c88-94c1-46ee-9076-2c28818c9481>
STRING ParamName;
STRING Value;
}
template EffectParamDWord {
<e13963bc-ae51-4c5d-b00f-cfa3a9d97ce5>
STRING ParamName;
DWORD Value;
}
template EffectInstance {
<e331f7e4-0559-4cc2-8e99-1cec1657928f>
STRING EffectFilename;
[...]
}
Mesh {
53;
0.000000;0.000000;-0.500000;,
0.000000;0.200000;-0.500000;,
0.076537;0.184776;-0.500000;,
0.141421;0.141421;-0.500000;,
0.184776;0.076537;-0.500000;,
0.200000;-0.000000;-0.500000;,
0.184776;-0.076537;-0.500000;,
0.141421;-0.141421;-0.500000;,
0.076537;-0.184776;-0.500000;,
-0.000000;-0.200000;-0.500000;,
-0.076537;-0.184776;-0.500000;,
-0.141421;-0.141421;-0.500000;,
-0.184776;-0.076537;-0.500000;,
-0.200000;0.000000;-0.500000;,
-0.184776;0.076537;-0.500000;,
-0.141421;0.141421;-0.500000;,
-0.076537;0.184776;-0.500000;,
0.000000;0.200000;-0.500000;,
0.097545;0.490393;0.500000;,
0.277785;0.415735;0.500000;,
0.415735;0.277785;0.500000;,
0.490393;0.097545;0.500000;,
0.490393;-0.097545;0.500000;,
0.415735;-0.277785;0.500000;,
0.277785;-0.415735;0.500000;,
0.097545;-0.490393;0.500000;,
-0.097545;-0.490393;0.500000;,
-0.277785;-0.415735;0.500000;,
-0.415735;-0.277785;0.500000;,
-0.490393;-0.097545;0.500000;,
-0.490393;0.097545;0.500000;,
-0.415735;0.277785;0.500000;,
-0.277785;0.415735;0.500000;,
-0.097545;0.490393;0.500000;,
0.097545;0.490393;0.500000;,
0.097545;0.490393;0.500000;,
0.277785;0.415735;0.500000;,
0.415735;0.277785;0.500000;,
0.490393;0.097545;0.500000;,
0.490393;-0.097545;0.500000;,
0.415735;-0.277785;0.500000;,
0.277785;-0.415735;0.500000;,
0.097545;-0.490393;0.500000;,
-0.097545;-0.490393;0.500000;,
-0.277785;-0.415735;0.500000;,
-0.415735;-0.277785;0.500000;,
-0.490393;-0.097545;0.500000;,
-0.490393;0.097545;0.500000;,
-0.415735;0.277785;0.500000;,
-0.277785;0.415735;0.500000;,
-0.097545;0.490393;0.500000;,
0.097545;0.490393;0.500000;,
0.000000;0.000000;0.500000;;
64;
3;0,1,2;,
3;0,2,3;,
3;0,3,4;,
3;0,4,5;,
3;0,5,6;,
3;0,6,7;,
3;0,7,8;,
3;0,8,9;,
3;0,9,10;,
3;0,10,11;,
3;0,11,12;,
3;0,12,13;,
3;0,13,14;,
3;0,14,15;,
3;0,15,16;,
3;0,16,17;,
3;1,18,2;,
3;2,18,19;,
3;2,19,3;,
3;3,19,20;,
3;3,20,4;,
3;4,20,21;,
3;4,21,5;,
3;5,21,22;,
3;5,22,6;,
3;6,22,23;,
3;6,23,7;,
3;7,23,24;,
3;7,24,8;,
3;8,24,25;,
3;8,25,9;,
3;9,25,26;,
3;9,26,10;,
3;10,26,27;,
3;10,27,11;,
3;11,27,28;,
3;11,28,12;,
3;12,28,29;,
3;12,29,13;,
3;13,29,30;,
3;13,30,14;,
3;14,30,31;,
3;14,31,15;,
3;15,31,32;,
3;15,32,16;,
3;16,32,33;,
3;16,33,17;,
3;17,33,34;,
3;52,36,35;,
3;52,37,36;,
3;52,38,37;,
3;52,39,38;,
3;52,40,39;,
3;52,41,40;,
3;52,42,41;,
3;52,43,42;,
3;52,44,43;,
3;52,45,44;,
3;52,46,45;,
3;52,47,46;,
3;52,48,47;,
3;52,49,48;,
3;52,50,49;,
3;52,51,50;;
MeshNormals {
53;
0.000000;0.000000;-1.000000;,
0.174494;0.877241;-0.447214;,
0.356907;0.861651;-0.360798;,
0.659479;0.659479;-0.360798;,
0.861651;0.356907;-0.360798;,
0.932644;0.000000;-0.360798;,
0.861651;-0.356907;-0.360798;,
0.659479;-0.659479;-0.360798;,
0.356907;-0.861651;-0.360798;,
-0.000000;-0.932644;-0.360798;,
-0.356908;-0.861651;-0.360798;,
-0.659479;-0.659479;-0.360798;,
-0.861651;-0.356907;-0.360798;,
-0.932644;0.000000;-0.360798;,
-0.861651;0.356908;-0.360798;,
-0.659479;0.659479;-0.360798;,
-0.356907;0.861651;-0.360798;,
-0.052791;0.941890;-0.331747;,
0.316849;0.905180;-0.283295;,
0.532520;0.796972;-0.285057;,
0.796972;0.532520;-0.285057;,
0.940093;0.186996;-0.285058;,
0.940093;-0.186996;-0.285057;,
0.796972;-0.532520;-0.285058;,
0.532520;-0.796972;-0.285057;,
0.186996;-0.940093;-0.285057;,
-0.186996;-0.940093;-0.285057;,
-0.532520;-0.796972;-0.285057;,
-0.796972;-0.532520;-0.285057;,
-0.940093;-0.186996;-0.285057;,
-0.940093;0.186996;-0.285058;,
-0.796972;0.532520;-0.285057;,
-0.532520;0.796972;-0.285057;,
-0.186996;0.940093;-0.285057;,
0.000000;0.960328;-0.278872;,
0.000000;0.000000;1.000000;,
0.000000;0.000000;1.000000;,
0.000000;0.000000;1.000000;,
0.000000;0.000000;1.000000;,
0.000000;0.000000;1.000000;,
0.000000;0.000000;1.000000;,
0.000000;0.000000;1.000000;,
0.000000;0.000000;1.000000;,
0.000000;0.000000;1.000000;,
0.000000;0.000000;1.000000;,
0.000000;0.000000;1.000000;,
0.000000;0.000000;1.000000;,
0.000000;0.000000;1.000000;,
0.000000;0.000000;1.000000;,
0.000000;0.000000;1.000000;,
0.000000;0.000000;1.000000;,
0.000000;0.000000;1.000000;,
0.000000;0.000000;1.000000;;
64;
3;0,1,2;,
3;0,2,3;,
3;0,3,4;,
3;0,4,5;,
3;0,5,6;,
3;0,6,7;,
3;0,7,8;,
3;0,8,9;,
3;0,9,10;,
3;0,10,11;,
3;0,11,12;,
3;0,12,13;,
3;0,13,14;,
3;0,14,15;,
3;0,15,16;,
3;0,16,17;,
3;1,18,2;,
3;2,18,19;,
3;2,19,3;,
3;3,19,20;,
3;3,20,4;,
3;4,20,21;,
3;4,21,5;,
3;5,21,22;,
3;5,22,6;,
3;6,22,23;,
3;6,23,7;,
3;7,23,24;,
3;7,24,8;,
3;8,24,25;,
3;8,25,9;,
3;9,25,26;,
3;9,26,10;,
3;10,26,27;,
3;10,27,11;,
3;11,27,28;,
3;11,28,12;,
3;12,28,29;,
3;12,29,13;,
3;13,29,30;,
3;13,30,14;,
3;14,30,31;,
3;14,31,15;,
3;15,31,32;,
3;15,32,16;,
3;16,32,33;,
3;16,33,17;,
3;17,33,34;,
3;52,36,35;,
3;52,37,36;,
3;52,38,37;,
3;52,39,38;,
3;52,40,39;,
3;52,41,40;,
3;52,42,41;,
3;52,43,42;,
3;52,44,43;,
3;52,45,44;,
3;52,46,45;,
3;52,47,46;,
3;52,48,47;,
3;52,49,48;,
3;52,50,49;,
3;52,51,50;;
}
MeshTextureCoords {
53;
0.500000;0.000000;,
0.000000;0.300000;,
0.062500;0.300000;,
0.125000;0.300000;,
0.187500;0.300000;,
0.250000;0.300000;,
0.312500;0.300000;,
0.375000;0.300000;,
0.437500;0.300000;,
0.500000;0.300000;,
0.562500;0.300000;,
0.625000;0.300000;,
0.687500;0.300000;,
0.750000;0.300000;,
0.812500;0.300000;,
0.875000;0.300000;,
0.937500;0.300000;,
1.000000;0.300000;,
0.000000;0.992990;,
0.062500;0.992990;,
0.125000;0.992990;,
0.187500;0.992990;,
0.250000;0.992990;,
0.312500;0.992990;,
0.375000;0.992990;,
0.437500;0.992990;,
0.500000;0.992990;,
0.562500;0.992990;,
0.625000;0.992990;,
0.687500;0.992990;,
0.750000;0.992990;,
0.812500;0.992990;,
0.875000;0.992990;,
0.937500;0.992990;,
1.000000;0.992990;,
0.000000;0.992990;,
0.000000;0.992990;,
0.000000;0.992990;,
0.000000;0.992990;,
0.000000;0.992990;,
0.000000;0.992990;,
0.000000;0.992990;,
0.000000;0.992990;,
0.000000;0.992990;,
0.000000;0.992990;,
0.000000;0.992990;,
0.000000;0.992990;,
0.000000;0.992990;,
0.000000;0.992990;,
0.000000;0.992990;,
0.000000;0.992990;,
0.000000;0.992990;,
0.000000;0.992990;;
}
MeshMaterialList {
1;
64;
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0;
Material {
1.000000;1.000000;1.000000;1.000000;;
1.000000;
1.000000;1.000000;1.000000;;
1.000000;1.000000;1.000000;;
TextureFilename {
"spotlight.bmp";
}
}
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+195
View File
@@ -0,0 +1,195 @@
////////////////////////////////////////////////////////////////////////////////////////////////////
///
/// BandiVideoLibrary 2.1
///
/// Copyright(C) 2008-2012 BandiSoft.com All rights reserved.
///
/// Author: denny
///
/// Visit http://www.bandisoft.com for more information.
///
////////////////////////////////////////////////////////////////////////////////////////////////////
#ifndef _BANDIVID_H
#define _BANDIVID_H
#include <windows.h>
#include <unknwn.h>
#ifndef ASSERT
# include "assert.h"
# define ASSERT(x) assert(x)
#endif
#ifndef _INC_TCHAR
# ifdef _UNICODE
# define _T(x) L##x
# define _stprintf swprintf
# define _stprintf_s swprintf_s
# else
# define _T(x) x
# define _stprintf sprintf
# define _stprintf_s sprintf_s
# endif
#endif
#define _BVL_MAKE_VER(a,b,c,d) ((a<<24)+(b<<16)+(c<<8)+d)
#define BVL_VERSION _BVL_MAKE_VER(2,1,5,20) // 2.1.4.17
// 이미지의 픽셀 포맷(타입)
enum BVL_PIXEL_FORMAT
{
BVLPF_NULL,
BVLPF_X8R8G8B8, // D3DFMT_X8R8G8B8 사용
BVLPF_R8G8B8, // D3DFMT_R8G8B8 사용
BVLPF_R5G6B5, // D3DFMT_R5G6B5 사용
BVLPF_R5G5B5, // D3DFMT_X1R5G5B5 사용
BVLPF_A8R8G8B8, // D3DFMT_A8R8G8B8 사용
};
// Seeking flags
enum BVL_SEEK_FLAG
{
BVL_SEEK_TIME, // time in 100-nanosecond
BVL_SEEK_FRAME, // video frame number
};
// 비디오의 현재 상태
enum BVL_STATUS
{
BVL_STATUS_ERROR = -1,
BVL_STATUS_CLOSED = 0,
BVL_STATUS_OPENING,
BVL_STATUS_READY,
BVL_STATUS_PLAYING,
BVL_STATUS_PAUSED,
BVL_STATUS_PLAYEND
};
// 프레임 데이터 구조체
struct BVL_FRAME
{
void* frame_buf; // Pointer to the frame buffer
INT frame_buf_size; // Number of bytes in a frame
INT pitch; // Number of bytes in one row of the surface.
INT width; // Frame width
INT height; // Frame height
BVL_PIXEL_FORMAT pixel_format; // Pixel format
INT64 frame_time; // 100nsec
INT64 frame_number;
};
// 비디오 정보 구조체
struct BVL_VIDEO_INFO
{
INT width;
INT height;
INT fps_rate;
INT fps_scale;
INT samplerate;
INT channels;
INT64 total_time; // 100nsec
INT64 total_frames;
};
// IBandiVideoFileReader 인터페이스
struct IBandiVideoFileReader : public IUnknown
{
virtual HRESULT Open(LPCWSTR path_name) PURE;
virtual void Close() PURE;
virtual INT Read(BYTE* buf, INT bytes_to_read) PURE;
virtual INT64 SetPosition(INT64 pos) PURE;
virtual INT64 GetPosition() PURE;
virtual INT64 GetFileSize() PURE;
};
// IBandiVideoSoundCB 인터페이스
struct IBandiVideoSoundCB : public IUnknown
{
virtual INT GetPcmData(INT16* pcm_buf, INT req_samples) PURE;
};
// IBandiVideoSound 인터페이스
struct IBandiVideoSound : public IUnknown
{
virtual HRESULT Open(INT channels, INT samplerate, IBandiVideoSoundCB *callback) PURE;
virtual void Close() PURE;
virtual HRESULT Start() PURE;
virtual HRESULT Stop() PURE;
virtual HRESULT Pause(BOOL pause) PURE;
virtual HRESULT GetTime(INT64 &time) PURE;
virtual HRESULT SetVolume(INT volume) PURE; // 0 ~ 255
};
////////////////////////////////////////////////////////////////////////////////////////////////////
// IBandiVideo2 인터페이스
////////////////////////////////////////////////////////////////////////////////////////////////////
struct IBandiVideo2 : public IUnknown
{
virtual HRESULT Verify(LPCSTR id, LPCSTR key) PURE; // 인증하기
virtual INT GetVersion() PURE; // 버전 정보
// playback
virtual HRESULT Open(LPCWSTR path_name, BOOL async) PURE;
virtual HRESULT Close() PURE;
virtual HRESULT Play() PURE;
virtual HRESULT Stop() PURE;
virtual HRESULT Seek(INT64 value, BVL_SEEK_FLAG seek_flag) PURE;
virtual HRESULT Pause(BOOL pause) PURE;
virtual BOOL IsNextFrame() PURE;
virtual HRESULT GetFrame(BVL_FRAME &frame, BOOL can_skip) PURE;
virtual HRESULT GetVideoInfo(BVL_VIDEO_INFO &info) PURE;
virtual HRESULT GetStatus(BVL_STATUS &status) PURE;
virtual HRESULT SetVolume(INT volume) PURE; // 0 ~ 255
};
// IBandiVideo2 인터페이스 생성 함수
typedef HRESULT (*LPCREATEBANDIVIDEO2)(UINT sdk_version, void** pp, IBandiVideoFileReader* reader, IBandiVideoSound *sound);
////////////////////////////////////////////////////////////////////////////////////////////////////
// 반디비디오 에러 코드
////////////////////////////////////////////////////////////////////////////////////////////////////
#define _FACBV 0x586
#define MAKE_BVHRESULT( code ) MAKE_HRESULT( 1, _FACBV, code )
#define MAKE_BVSTATUS( code ) MAKE_HRESULT( 0, _FACBV, code )
#define BV_OK S_OK
#define BV_FALSE S_FALSE
#define BVERR_FAIL E_FAIL // 함수의 정해진 명령을 처리하는데 실패하였음
#define BVERR_LOAD_LIBRARY_FAIL MAKE_BVHRESULT(0x1020) // LoadLibrary 함수 실행중 에러
#define BVERR_ALREADY_CREATED MAKE_BVHRESULT(0x1021) // 비디오 라이브러리의 인스턴스가 이미 생성되었음
#define BVERR_GET_PROC_ADDRESS_FAIL MAKE_BVHRESULT(0x1022) // 비디오 라이브러리의 CreateBandiVideo 함수의 주소를 얻는데 실패하였음
#define BVERR_LIBRARY_NOT_LOADED MAKE_BVHRESULT(0x1023) // 라이브러리가 로드되지 않았음
#define BVERR_UNSUPPORTED_OS MAKE_BVHRESULT(0x1024) // 지원되지 않는 운영체제임
#define BVERR_INVALID_VERSION MAKE_BVHRESULT(0x1030) // 비디오 라이브러리의 헤더와 DLL 의 버젼이 안맞음
#define BVERR_OUT_OF_MEMORY MAKE_BVHRESULT(0x1031) // 메모리가 부족하여 비디오라이브러리의 인스턴스를 생성할수 없음
#define BVERR_OPEN_FAILED MAKE_BVHRESULT(0x1040) // 파일이 없거나 지원되지 않는 컨테이너 형식임
#define BVERR_NOT_OPENED MAKE_BVHRESULT(0x1041) // Open 되지 않은 파일에서 재생시도
#endif // _BANDIVID_H
@@ -0,0 +1,247 @@
////////////////////////////////////////////////////////////////////////////////////////////////////
///
/// BandiVideoLibrary 2.1 Sample
///
/// Copyright(C) 2008-2011 BandiSoft.com All rights reserved.
///
/// Visit http://www.bandisoft.com for more information.
///
////////////////////////////////////////////////////////////////////////////////////////////////////
#include <windows.h>
#include <stdio.h>
#include "BandiVideoLibrary.h"
#include "BandiVideoTexture_DX9.h"
#pragma warning (disable:4996)
#define WINDOW_TEXT "BandiVideo Async Playback"
#define MV_WIDTH 1024
#define MV_HEIGHT 768
LRESULT WINAPI WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_PAINT:
{
// 검은색으로 배경 칠하기
PAINTSTRUCT ps;
HDC dc;
dc = BeginPaint(hwnd, &ps);
PatBlt(dc, 0, 0, 4096, 4096, BLACKNESS);
EndPaint(hwnd, &ps);
}
return 0;
case WM_ERASEBKGND:
return 1;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
// 윈도우 생성
static HWND CreatePlayerWindow(HINSTANCE hInstance, HINSTANCE hPrevInstance)
{
if(!hPrevInstance)
{
WNDCLASS wc;
wc.style = 0;
wc.lpfnWndProc = WindowProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(101));
wc.hCursor = LoadCursor(0, IDC_ARROW);;
wc.hbrBackground = 0;
wc.lpszMenuName = 0;
wc.lpszClassName = "AsyncPlayback";
if(!RegisterClass(&wc))
{
return( 0 );
}
}
return CreateWindow("AsyncPlayback", WINDOW_TEXT,
WS_CAPTION | WS_POPUP| WS_CLIPCHILDREN |
WS_SYSMENU | WS_MINIMIZEBOX | WS_SIZEBOX,
64, 64,
64, 64,
0, 0, hInstance,0);
}
// 윈도우 보더 크기 계산
static void CalcWindowBorder(HWND hwnd, int &extra_width, int &extra_height)
{
RECT r, c;
GetWindowRect(hwnd, &r);
GetClientRect(hwnd, &c);
extra_width = ( r.right - r.left ) - ( c.right - c.left );
extra_height = ( r.bottom - r.top ) - ( c.bottom - c.top );
}
int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
HWND hwnd;
MSG msg;
int extra_width, extra_height;
// 재생창 생성하기
hwnd = CreatePlayerWindow(hInstance, hPrevInstance);
if(!hwnd)
{
MessageBox(NULL, "Error creating window.", WINDOW_TEXT, MB_OK | MB_ICONSTOP);
return 1;
}
CalcWindowBorder(hwnd, extra_width, extra_height);
CBandiVideoLibrary bvl;
CBandiVideoDevice* bvd = NULL;
CBandiVideoTexture* bvt = NULL;
BVL_VIDEO_INFO info;
if(FAILED(bvl.Create(BANDIVIDEO_DLL_FILE_NAME, NULL, NULL)))
{
MessageBox(NULL, "Error creating BandiVideoLibrary.", WINDOW_TEXT, MB_OK | MB_ICONSTOP);
DestroyWindow(hwnd);
return 2;
}
/* // verify
if(FAILED(bvl.Verify("BANDISOFT-TRIAL-200909", "ea92bc5b")))
{
// trial expired!!
ASSERT(0);
}*/
if(FAILED(bvl.Open(lpCmdLine, TRUE)))
{
MessageBox(NULL, "Error opening file....", WINDOW_TEXT, MB_OK | MB_ICONSTOP);
DestroyWindow(hwnd);
return 3;
}
// 비디오 크기에 맞춰 창크기 변경
SetWindowPos(hwnd, 0, 0, 0, MV_WIDTH+extra_width, MV_HEIGHT+extra_height, SWP_NOMOVE);
bvd = new CBandiVideoDevice_DX9();
if(!bvd || FAILED(bvd->Open(hwnd)))
{
MessageBox(NULL, "Error opening device...", WINDOW_TEXT, MB_OK | MB_ICONSTOP);
DestroyWindow(hwnd);
if(bvd) delete bvd;
return -1;
}
ShowWindow(hwnd, nCmdShow);
do
{
if(PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
{
if(msg.message == WM_QUIT)
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
BVL_STATUS status;
bvl.GetStatus(status);
if(status == BVL_STATUS_READY)
{
// 재생할 준비가 완료되었다면, 재생 시작
bvl.GetVideoInfo(info);
bvl.Play();
if(bvt == NULL)
{
bvt = new CBandiVideoTexture_DX9((CBandiVideoDevice_DX9*)bvd);
if(!bvt || FAILED(bvt->Open(info.width , info.height)))
{
if(bvt) delete bvt;
bvt = NULL;
}
}
}
else if(status == BVL_STATUS_PLAYEND)
{
// 끝까지 재생이 완료되었으면, 다시 열기
bvl.Close();
bvl.Open(lpCmdLine, TRUE);
}
else if(status == BVL_STATUS_ERROR)
{
MessageBox(NULL, "Error playing file...", WINDOW_TEXT, MB_OK | MB_ICONSTOP);
break;
}
// 새 프레임을 출력할 시간인가?
if(bvl.IsNextFrame())
{
INT pitch;
BYTE* buf = bvt->Lock(pitch);
if(buf)
{
// Get frame
BVL_FRAME frame;
frame.frame_buf = buf;
frame.frame_buf_size = info.height*pitch;
frame.pitch = pitch;
frame.width = info.width;
frame.height = info.height;
frame.pixel_format = bvt->GetFormat();
bvl.GetFrame(frame, TRUE);
bvt->Unlock();
// Show frame
bvd->StartFrame();
bvt->Draw(0, 0, MV_WIDTH, MV_HEIGHT);
bvd->EndFrame();
}
}
else
{
Sleep(1);
}
}
}
while(1);
bvl.Destroy();
if(bvd)
{
bvd->Close();
delete bvd;
}
if(bvt)
{
bvt->Close();
delete bvt;
}
return 0;
}
@@ -0,0 +1,365 @@
<?xml version="1.0" encoding="ks_c_5601-1987"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="9.00"
Name="AsyncPlayback"
ProjectGUID="{9905918E-5CD9-4698-B0C3-8CA1FD84CC13}"
RootNamespace="AsyncPlayback"
Keyword="Win32Proj"
TargetFrameworkVersion="196613"
>
<Platforms>
<Platform
Name="Win32"
/>
<Platform
Name="x64"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="2"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../../include, ../../source"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
DebugInformationFormat="4"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="d3d9.lib dsound.lib"
OutputFile="..\..\bin\$(ProjectName)_d.exe"
LinkIncremental="2"
GenerateDebugInformation="true"
SubSystem="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Debug|x64"
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="2"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../../include, ../../source"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="d3d9.lib dsound.lib"
OutputFile="..\..\bin\$(ProjectName)64_d.exe"
LinkIncremental="2"
GenerateDebugInformation="true"
SubSystem="2"
TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="2"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
EnableIntrinsicFunctions="true"
AdditionalIncludeDirectories="../../include, ../../source"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="d3d9.lib dsound.lib"
OutputFile="..\..\bin\$(ProjectName).exe"
LinkIncremental="1"
GenerateDebugInformation="true"
SubSystem="2"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|x64"
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="2"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
EnableIntrinsicFunctions="true"
AdditionalIncludeDirectories="../../include, ../../source"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="d3d9.lib dsound.lib"
OutputFile="..\..\bin\$(ProjectName)64.exe"
LinkIncremental="1"
GenerateDebugInformation="true"
SubSystem="2"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="main"
>
<File
RelativePath=".\AsyncPlayback.cpp"
>
</File>
</Filter>
<Filter
Name="bvl"
>
<File
RelativePath="..\..\source\BandiVideoLibrary.cpp"
>
</File>
<File
RelativePath="..\..\source\BandiVideoLibrary.h"
>
</File>
<File
RelativePath="..\..\source\BandiVideoTexture.h"
>
</File>
<File
RelativePath="..\..\source\BandiVideoTexture_DX9.cpp"
>
</File>
<File
RelativePath="..\..\source\BandiVideoTexture_DX9.h"
>
</File>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>
@@ -0,0 +1,183 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{9905918E-5CD9-4698-B0C3-8CA1FD84CC13}</ProjectGuid>
<RootNamespace>AsyncPlayback</RootNamespace>
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../include; ../../source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalDependencies>d3d9.lib;dsound.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>..\..\bin\$(ProjectName)_d.exe</OutputFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<TargetMachine>MachineX86</TargetMachine>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Midl>
<TargetEnvironment>X64</TargetEnvironment>
</Midl>
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>../../include; ../../source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalDependencies>d3d9.lib;dsound.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>..\..\bin\$(ProjectName)64_d.exe</OutputFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<TargetMachine>MachineX64</TargetMachine>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<IntrinsicFunctions>true</IntrinsicFunctions>
<AdditionalIncludeDirectories>../../include; ../../source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<FunctionLevelLinking>true</FunctionLevelLinking>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalDependencies>d3d9.lib;dsound.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>..\..\bin\$(ProjectName).exe</OutputFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<TargetMachine>MachineX86</TargetMachine>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Midl>
<TargetEnvironment>X64</TargetEnvironment>
</Midl>
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<IntrinsicFunctions>true</IntrinsicFunctions>
<AdditionalIncludeDirectories>../../include; ../../source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<FunctionLevelLinking>true</FunctionLevelLinking>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalDependencies>d3d9.lib;dsound.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>..\..\bin\$(ProjectName)64.exe</OutputFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<TargetMachine>MachineX64</TargetMachine>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="AsyncPlayback.cpp" />
<ClCompile Include="..\..\source\BandiVideoLibrary.cpp" />
<ClCompile Include="..\..\source\BandiVideoTexture_DX9.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\source\BandiVideoLibrary.h" />
<ClInclude Include="..\..\source\BandiVideoTexture.h" />
<ClInclude Include="..\..\source\BandiVideoTexture_DX9.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="main">
<UniqueIdentifier>{79a6d450-f470-40a4-aacb-dab5f073d9fe}</UniqueIdentifier>
</Filter>
<Filter Include="bvl">
<UniqueIdentifier>{171483cd-ad35-4957-af45-d2505e55cc64}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="AsyncPlayback.cpp">
<Filter>main</Filter>
</ClCompile>
<ClCompile Include="..\..\source\BandiVideoLibrary.cpp">
<Filter>bvl</Filter>
</ClCompile>
<ClCompile Include="..\..\source\BandiVideoTexture_DX9.cpp">
<Filter>bvl</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\source\BandiVideoLibrary.h">
<Filter>bvl</Filter>
</ClInclude>
<ClInclude Include="..\..\source\BandiVideoTexture.h">
<Filter>bvl</Filter>
</ClInclude>
<ClInclude Include="..\..\source\BandiVideoTexture_DX9.h">
<Filter>bvl</Filter>
</ClInclude>
</ItemGroup>
</Project>
@@ -0,0 +1,365 @@
<?xml version="1.0" encoding="ks_c_5601-1987"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8.00"
Name="AsyncPlayback"
ProjectGUID="{9905918E-5CD9-4698-B0C3-8CA1FD84CC13}"
RootNamespace="AsyncPlayback"
Keyword="Win32Proj"
TargetFrameworkVersion="196613"
>
<Platforms>
<Platform
Name="Win32"
/>
<Platform
Name="x64"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="2"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../../include, ../../source"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
DebugInformationFormat="4"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="d3d9.lib dsound.lib"
OutputFile="..\..\bin\$(ProjectName)_d.exe"
LinkIncremental="2"
GenerateDebugInformation="true"
SubSystem="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Debug|x64"
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="2"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../../include, ../../source"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="d3d9.lib dsound.lib"
OutputFile="..\..\bin\$(ProjectName)64_d.exe"
LinkIncremental="2"
GenerateDebugInformation="true"
SubSystem="2"
TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="2"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
EnableIntrinsicFunctions="true"
AdditionalIncludeDirectories="../../include, ../../source"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="d3d9.lib dsound.lib"
OutputFile="..\..\bin\$(ProjectName).exe"
LinkIncremental="1"
GenerateDebugInformation="true"
SubSystem="2"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|x64"
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="2"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
EnableIntrinsicFunctions="true"
AdditionalIncludeDirectories="../../include, ../../source"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="d3d9.lib dsound.lib"
OutputFile="..\..\bin\$(ProjectName)64.exe"
LinkIncremental="1"
GenerateDebugInformation="true"
SubSystem="2"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="main"
>
<File
RelativePath=".\AsyncPlayback.cpp"
>
</File>
</Filter>
<Filter
Name="bvl"
>
<File
RelativePath="..\..\source\BandiVideoLibrary.cpp"
>
</File>
<File
RelativePath="..\..\source\BandiVideoLibrary.h"
>
</File>
<File
RelativePath="..\..\source\BandiVideoTexture.h"
>
</File>
<File
RelativePath="..\..\source\BandiVideoTexture_DX9.cpp"
>
</File>
<File
RelativePath="..\..\source\BandiVideoTexture_DX9.h"
>
</File>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>
File diff suppressed because it is too large. Load diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

@@ -0,0 +1,150 @@
//Microsoft Visual C++ generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#ifndef APSTUDIO_INVOKED
#include "targetver.h"
#endif
#define APSTUDIO_HIDDEN_SYMBOLS
#include "windows.h"
#undef APSTUDIO_HIDDEN_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE 9, 1
#pragma code_page(949)
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_BANDIVIDSAMPLE ICON "BandiVidSample.ico"
IDI_SMALL ICON "small.ico"
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
IDC_BANDIVIDSAMPLE MENU
BEGIN
POPUP "&File"
BEGIN
MENUITEM "E&xit", IDM_EXIT
END
POPUP "&Help"
BEGIN
MENUITEM "&About ...", IDM_ABOUT
END
END
/////////////////////////////////////////////////////////////////////////////
//
// Accelerator
//
IDC_BANDIVIDSAMPLE ACCELERATORS
BEGIN
"?", IDM_ABOUT, ASCII, ALT
"/", IDM_ABOUT, ASCII, ALT
END
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_ABOUTBOX DIALOGEX 0, 0, 170, 62
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "About BandiVidSample"
FONT 8, "MS Shell Dlg"
BEGIN
ICON IDR_MAINFRAME,IDC_STATIC,14,14,21,20
LTEXT "BandiVidSample, Version 1.0",IDC_STATIC,42,14,114,8,SS_NOPREFIX
LTEXT "Copyright (C) 2009",IDC_STATIC,42,26,114,8
DEFPUSHBUTTON "OK",IDOK,113,41,50,14,WS_GROUP
END
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
IDD_ABOUTBOX, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 163
TOPMARGIN, 7
BOTTOMMARGIN, 55
END
END
#endif // APSTUDIO_INVOKED
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE
BEGIN
"#ifndef APSTUDIO_INVOKED\r\n"
"#include ""targetver.h""\r\n"
"#endif\r\n"
"#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
"#include ""windows.h""\r\n"
"#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
"\0"
END
3 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE
BEGIN
IDC_BANDIVIDSAMPLE "BANDIVIDSAMPLE"
IDS_APP_TITLE "BandiVidSample"
END
#endif
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
@@ -0,0 +1,26 @@
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BandiVidSample", "BandiVidSample.vcxproj", "{4E71EE8D-57F4-4400-9109-E0C4A1F273D0}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Debug|x64 = Debug|x64
Release|Win32 = Release|Win32
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{4E71EE8D-57F4-4400-9109-E0C4A1F273D0}.Debug|Win32.ActiveCfg = Debug|Win32
{4E71EE8D-57F4-4400-9109-E0C4A1F273D0}.Debug|Win32.Build.0 = Debug|Win32
{4E71EE8D-57F4-4400-9109-E0C4A1F273D0}.Debug|x64.ActiveCfg = Debug|x64
{4E71EE8D-57F4-4400-9109-E0C4A1F273D0}.Debug|x64.Build.0 = Debug|x64
{4E71EE8D-57F4-4400-9109-E0C4A1F273D0}.Release|Win32.ActiveCfg = Release|Win32
{4E71EE8D-57F4-4400-9109-E0C4A1F273D0}.Release|Win32.Build.0 = Release|Win32
{4E71EE8D-57F4-4400-9109-E0C4A1F273D0}.Release|x64.ActiveCfg = Release|x64
{4E71EE8D-57F4-4400-9109-E0C4A1F273D0}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
@@ -0,0 +1,599 @@
<?xml version="1.0" encoding="ks_c_5601-1987"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="9.00"
Name="BandiVidSample"
ProjectGUID="{4E71EE8D-57F4-4400-9109-E0C4A1F273D0}"
RootNamespace="BandiVidSample"
Keyword="Win32Proj"
TargetFrameworkVersion="196613"
>
<Platforms>
<Platform
Name="Win32"
/>
<Platform
Name="x64"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
UseOfATL="1"
CharacterSet="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories=".;./dxut;../../include,../../source"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="4"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
OutputFile="..\..\bin\$(ProjectName)_d.exe"
LinkIncremental="2"
AdditionalLibraryDirectories=""
GenerateDebugInformation="true"
SubSystem="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Debug|x64"
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="1"
UseOfATL="1"
CharacterSet="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories=".;./dxut;../../include,../../source"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
OutputFile="..\..\bin\$(ProjectName)64_d.exe"
LinkIncremental="2"
AdditionalLibraryDirectories=""
GenerateDebugInformation="true"
SubSystem="2"
TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
UseOfATL="1"
CharacterSet="1"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
EnableIntrinsicFunctions="true"
AdditionalIncludeDirectories=".;./dxut;../../include,../../source"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
OutputFile="..\..\bin\$(ProjectName).exe"
LinkIncremental="1"
AdditionalLibraryDirectories=""
GenerateDebugInformation="true"
SubSystem="2"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|x64"
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="1"
UseOfATL="1"
CharacterSet="1"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
EnableIntrinsicFunctions="true"
AdditionalIncludeDirectories=".;./dxut;../../include,../../source"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
OutputFile="..\..\bin\$(ProjectName)64.exe"
LinkIncremental="1"
AdditionalLibraryDirectories=""
GenerateDebugInformation="true"
SubSystem="2"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
<File
RelativePath=".\BandiVidSample.ico"
>
</File>
<File
RelativePath=".\BandiVidSample.rc"
>
</File>
<File
RelativePath=".\Resource.h"
>
</File>
<File
RelativePath=".\small.ico"
>
</File>
</Filter>
<Filter
Name="default"
>
<File
RelativePath=".\stdafx.cpp"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="1"
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|x64"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="1"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="1"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|x64"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="1"
/>
</FileConfiguration>
</File>
<File
RelativePath=".\stdafx.h"
>
</File>
<File
RelativePath=".\targetver.h"
>
</File>
</Filter>
<Filter
Name="main"
>
<File
RelativePath=".\BandiVidSample.cpp"
>
</File>
<File
RelativePath=".\VideoTest.cpp"
>
</File>
<File
RelativePath=".\VideoTest.h"
>
</File>
</Filter>
<Filter
Name="DXUT"
>
<File
RelativePath=".\DXUT\dxstdafx.cpp"
>
</File>
<File
RelativePath=".\DXUT\dxstdafx.h"
>
</File>
<File
RelativePath=".\DXUT\DXUT.cpp"
>
</File>
<File
RelativePath=".\DXUT\DXUT.h"
>
</File>
<File
RelativePath=".\DXUT\DXUTEffectMap.cpp"
>
</File>
<File
RelativePath=".\DXUT\DXUTEffectMap.h"
>
</File>
<File
RelativePath=".\DXUT\DXUTenum.cpp"
>
</File>
<File
RelativePath=".\DXUT\DXUTenum.h"
>
</File>
<File
RelativePath=".\DXUT\DXUTgui.cpp"
>
</File>
<File
RelativePath=".\DXUT\DXUTgui.h"
>
</File>
<File
RelativePath=".\DXUT\DXUTMesh.cpp"
>
</File>
<File
RelativePath=".\DXUT\DXUTMesh.h"
>
</File>
<File
RelativePath=".\DXUT\DXUTmisc.cpp"
>
</File>
<File
RelativePath=".\DXUT\DXUTmisc.h"
>
</File>
<File
RelativePath=".\DXUT\DXUTsettingsdlg.cpp"
>
</File>
<File
RelativePath=".\DXUT\DXUTsettingsdlg.h"
>
</File>
<File
RelativePath=".\DXUT\DXUTsound.cpp"
>
</File>
<File
RelativePath=".\DXUT\DXUTsound.h"
>
</File>
<File
RelativePath=".\DXUT\SDKmesh.cpp"
>
</File>
<File
RelativePath=".\DXUT\SDKmesh.h"
>
</File>
</Filter>
<Filter
Name="bvl"
>
<File
RelativePath="..\..\source\BandiVideoLibrary.cpp"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="0"
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|x64"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="0"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="0"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|x64"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="0"
/>
</FileConfiguration>
</File>
<File
RelativePath="..\..\source\BandiVideoLibrary.h"
>
</File>
<File
RelativePath="..\..\source\BandiVideoTexture.h"
>
</File>
<File
RelativePath="..\..\source\BandiVideoTexture_DX9.cpp"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="0"
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|x64"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="0"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="0"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|x64"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="0"
/>
</FileConfiguration>
</File>
<File
RelativePath="..\..\source\BandiVideoTexture_DX9.h"
>
</File>
</Filter>
<File
RelativePath=".\ReadMe.txt"
>
</File>
</Files>
<Globals>
</Globals>
</VisualStudioProject>
@@ -0,0 +1,241 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{4E71EE8D-57F4-4400-9109-E0C4A1F273D0}</ProjectGuid>
<RootNamespace>BandiVidSample</RootNamespace>
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseOfAtl>Static</UseOfAtl>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseOfAtl>Static</UseOfAtl>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseOfAtl>Static</UseOfAtl>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseOfAtl>Static</UseOfAtl>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(WindowsSdkDir)include;$(DXSDK_DIR)include;$(IncludePath)</IncludePath>
<LibraryPath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(DXSDK_DIR)Lib\x86;$(LibraryPath)</LibraryPath>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>.;./dxut;../../include;../../source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
</ClCompile>
<Link>
<OutputFile>..\..\bin\$(ProjectName)_d.exe</OutputFile>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<TargetMachine>MachineX86</TargetMachine>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Midl>
<TargetEnvironment>X64</TargetEnvironment>
</Midl>
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>.;./dxut;../../include;../../source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<OutputFile>..\..\bin\$(ProjectName)64_d.exe</OutputFile>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<TargetMachine>MachineX64</TargetMachine>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<IntrinsicFunctions>true</IntrinsicFunctions>
<AdditionalIncludeDirectories>.;./dxut;../../include;../../source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<FunctionLevelLinking>true</FunctionLevelLinking>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<OutputFile>$(SolutionDir)$(Configuration)\BandiVidSample.exe</OutputFile>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<TargetMachine>MachineX86</TargetMachine>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Midl>
<TargetEnvironment>X64</TargetEnvironment>
</Midl>
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<IntrinsicFunctions>true</IntrinsicFunctions>
<AdditionalIncludeDirectories>.;./dxut;../../include;../../source;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<FunctionLevelLinking>true</FunctionLevelLinking>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<OutputFile>..\..\bin\$(ProjectName)64.exe</OutputFile>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<TargetMachine>MachineX64</TargetMachine>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<None Include="BandiVidSample.ico" />
<None Include="small.ico" />
<None Include="ReadMe.txt" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="BandiVidSample.rc" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="Resource.h" />
<ClInclude Include="stdafx.h" />
<ClInclude Include="targetver.h" />
<ClInclude Include="VideoTest.h" />
<ClInclude Include="DXUT\dxstdafx.h" />
<ClInclude Include="DXUT\DXUT.h" />
<ClInclude Include="DXUT\DXUTEffectMap.h" />
<ClInclude Include="DXUT\DXUTenum.h" />
<ClInclude Include="DXUT\DXUTgui.h" />
<ClInclude Include="DXUT\DXUTMesh.h" />
<ClInclude Include="DXUT\DXUTmisc.h" />
<ClInclude Include="DXUT\DXUTsettingsdlg.h" />
<ClInclude Include="DXUT\DXUTsound.h" />
<ClInclude Include="DXUT\SDKmesh.h" />
<ClInclude Include="..\..\source\BandiVideoLibrary.h" />
<ClInclude Include="..\..\source\BandiVideoTexture.h" />
<ClInclude Include="..\..\source\BandiVideoTexture_DX9.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="stdafx.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
</ClCompile>
<ClCompile Include="BandiVidSample.cpp" />
<ClCompile Include="VideoTest.cpp" />
<ClCompile Include="DXUT\dxstdafx.cpp" />
<ClCompile Include="DXUT\DXUT.cpp" />
<ClCompile Include="DXUT\DXUTEffectMap.cpp" />
<ClCompile Include="DXUT\DXUTenum.cpp" />
<ClCompile Include="DXUT\DXUTgui.cpp" />
<ClCompile Include="DXUT\DXUTMesh.cpp" />
<ClCompile Include="DXUT\DXUTmisc.cpp" />
<ClCompile Include="DXUT\DXUTsettingsdlg.cpp" />
<ClCompile Include="DXUT\DXUTsound.cpp" />
<ClCompile Include="DXUT\SDKmesh.cpp" />
<ClCompile Include="..\..\source\BandiVideoLibrary.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\..\source\BandiVideoTexture_DX9.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
</PrecompiledHeader>
</ClCompile>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
@@ -0,0 +1,135 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>
</Filter>
<Filter Include="default">
<UniqueIdentifier>{1a09e89f-b061-4f8e-a9c2-2d81e029087c}</UniqueIdentifier>
</Filter>
<Filter Include="main">
<UniqueIdentifier>{5b234827-d2df-40d3-828d-da21b4183520}</UniqueIdentifier>
</Filter>
<Filter Include="DXUT">
<UniqueIdentifier>{e8a2c620-9eab-4ae3-9d4c-f8df5e0d7760}</UniqueIdentifier>
</Filter>
<Filter Include="bvl">
<UniqueIdentifier>{def60c92-5f53-40f4-acd7-841c8812cf96}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<None Include="BandiVidSample.ico">
<Filter>Resource Files</Filter>
</None>
<None Include="small.ico">
<Filter>Resource Files</Filter>
</None>
<None Include="ReadMe.txt" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="BandiVidSample.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="Resource.h">
<Filter>Resource Files</Filter>
</ClInclude>
<ClInclude Include="stdafx.h">
<Filter>default</Filter>
</ClInclude>
<ClInclude Include="targetver.h">
<Filter>default</Filter>
</ClInclude>
<ClInclude Include="VideoTest.h">
<Filter>main</Filter>
</ClInclude>
<ClInclude Include="DXUT\dxstdafx.h">
<Filter>DXUT</Filter>
</ClInclude>
<ClInclude Include="DXUT\DXUT.h">
<Filter>DXUT</Filter>
</ClInclude>
<ClInclude Include="DXUT\DXUTEffectMap.h">
<Filter>DXUT</Filter>
</ClInclude>
<ClInclude Include="DXUT\DXUTenum.h">
<Filter>DXUT</Filter>
</ClInclude>
<ClInclude Include="DXUT\DXUTgui.h">
<Filter>DXUT</Filter>
</ClInclude>
<ClInclude Include="DXUT\DXUTMesh.h">
<Filter>DXUT</Filter>
</ClInclude>
<ClInclude Include="DXUT\DXUTmisc.h">
<Filter>DXUT</Filter>
</ClInclude>
<ClInclude Include="DXUT\DXUTsettingsdlg.h">
<Filter>DXUT</Filter>
</ClInclude>
<ClInclude Include="DXUT\DXUTsound.h">
<Filter>DXUT</Filter>
</ClInclude>
<ClInclude Include="DXUT\SDKmesh.h">
<Filter>DXUT</Filter>
</ClInclude>
<ClInclude Include="..\..\source\BandiVideoLibrary.h">
<Filter>bvl</Filter>
</ClInclude>
<ClInclude Include="..\..\source\BandiVideoTexture.h">
<Filter>bvl</Filter>
</ClInclude>
<ClInclude Include="..\..\source\BandiVideoTexture_DX9.h">
<Filter>bvl</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="stdafx.cpp">
<Filter>default</Filter>
</ClCompile>
<ClCompile Include="BandiVidSample.cpp">
<Filter>main</Filter>
</ClCompile>
<ClCompile Include="VideoTest.cpp">
<Filter>main</Filter>
</ClCompile>
<ClCompile Include="DXUT\dxstdafx.cpp">
<Filter>DXUT</Filter>
</ClCompile>
<ClCompile Include="DXUT\DXUT.cpp">
<Filter>DXUT</Filter>
</ClCompile>
<ClCompile Include="DXUT\DXUTEffectMap.cpp">
<Filter>DXUT</Filter>
</ClCompile>
<ClCompile Include="DXUT\DXUTenum.cpp">
<Filter>DXUT</Filter>
</ClCompile>
<ClCompile Include="DXUT\DXUTgui.cpp">
<Filter>DXUT</Filter>
</ClCompile>
<ClCompile Include="DXUT\DXUTMesh.cpp">
<Filter>DXUT</Filter>
</ClCompile>
<ClCompile Include="DXUT\DXUTmisc.cpp">
<Filter>DXUT</Filter>
</ClCompile>
<ClCompile Include="DXUT\DXUTsettingsdlg.cpp">
<Filter>DXUT</Filter>
</ClCompile>
<ClCompile Include="DXUT\DXUTsound.cpp">
<Filter>DXUT</Filter>
</ClCompile>
<ClCompile Include="DXUT\SDKmesh.cpp">
<Filter>DXUT</Filter>
</ClCompile>
<ClCompile Include="..\..\source\BandiVideoLibrary.cpp">
<Filter>bvl</Filter>
</ClCompile>
<ClCompile Include="..\..\source\BandiVideoTexture_DX9.cpp">
<Filter>bvl</Filter>
</ClCompile>
</ItemGroup>
</Project>
@@ -0,0 +1,599 @@
<?xml version="1.0" encoding="ks_c_5601-1987"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8.00"
Name="BandiVidSample"
ProjectGUID="{4E71EE8D-57F4-4400-9109-E0C4A1F273D0}"
RootNamespace="BandiVidSample"
Keyword="Win32Proj"
TargetFrameworkVersion="196613"
>
<Platforms>
<Platform
Name="Win32"
/>
<Platform
Name="x64"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
UseOfATL="1"
CharacterSet="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories=".;./dxut;../../include,../../source"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="4"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
OutputFile="..\..\bin\$(ProjectName)_d.exe"
LinkIncremental="2"
AdditionalLibraryDirectories=""
GenerateDebugInformation="true"
SubSystem="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Debug|x64"
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="1"
UseOfATL="1"
CharacterSet="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories=".;./dxut;../../include,../../source"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
OutputFile="..\..\bin\$(ProjectName)64_d.exe"
LinkIncremental="2"
AdditionalLibraryDirectories=""
GenerateDebugInformation="true"
SubSystem="2"
TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
UseOfATL="1"
CharacterSet="1"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
EnableIntrinsicFunctions="true"
AdditionalIncludeDirectories=".;./dxut;../../include,../../source"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
OutputFile="..\..\bin\$(ProjectName).exe"
LinkIncremental="1"
AdditionalLibraryDirectories=""
GenerateDebugInformation="true"
SubSystem="2"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|x64"
OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
ConfigurationType="1"
UseOfATL="1"
CharacterSet="1"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
EnableIntrinsicFunctions="true"
AdditionalIncludeDirectories=".;./dxut;../../include,../../source"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
OutputFile="..\..\bin\$(ProjectName)64.exe"
LinkIncremental="1"
AdditionalLibraryDirectories=""
GenerateDebugInformation="true"
SubSystem="2"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
<File
RelativePath=".\BandiVidSample.ico"
>
</File>
<File
RelativePath=".\BandiVidSample.rc"
>
</File>
<File
RelativePath=".\Resource.h"
>
</File>
<File
RelativePath=".\small.ico"
>
</File>
</Filter>
<Filter
Name="default"
>
<File
RelativePath=".\stdafx.cpp"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="1"
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|x64"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="1"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="1"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|x64"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="1"
/>
</FileConfiguration>
</File>
<File
RelativePath=".\stdafx.h"
>
</File>
<File
RelativePath=".\targetver.h"
>
</File>
</Filter>
<Filter
Name="main"
>
<File
RelativePath=".\BandiVidSample.cpp"
>
</File>
<File
RelativePath=".\VideoTest.cpp"
>
</File>
<File
RelativePath=".\VideoTest.h"
>
</File>
</Filter>
<Filter
Name="DXUT"
>
<File
RelativePath=".\DXUT\dxstdafx.cpp"
>
</File>
<File
RelativePath=".\DXUT\dxstdafx.h"
>
</File>
<File
RelativePath=".\DXUT\DXUT.cpp"
>
</File>
<File
RelativePath=".\DXUT\DXUT.h"
>
</File>
<File
RelativePath=".\DXUT\DXUTEffectMap.cpp"
>
</File>
<File
RelativePath=".\DXUT\DXUTEffectMap.h"
>
</File>
<File
RelativePath=".\DXUT\DXUTenum.cpp"
>
</File>
<File
RelativePath=".\DXUT\DXUTenum.h"
>
</File>
<File
RelativePath=".\DXUT\DXUTgui.cpp"
>
</File>
<File
RelativePath=".\DXUT\DXUTgui.h"
>
</File>
<File
RelativePath=".\DXUT\DXUTMesh.cpp"
>
</File>
<File
RelativePath=".\DXUT\DXUTMesh.h"
>
</File>
<File
RelativePath=".\DXUT\DXUTmisc.cpp"
>
</File>
<File
RelativePath=".\DXUT\DXUTmisc.h"
>
</File>
<File
RelativePath=".\DXUT\DXUTsettingsdlg.cpp"
>
</File>
<File
RelativePath=".\DXUT\DXUTsettingsdlg.h"
>
</File>
<File
RelativePath=".\DXUT\DXUTsound.cpp"
>
</File>
<File
RelativePath=".\DXUT\DXUTsound.h"
>
</File>
<File
RelativePath=".\DXUT\SDKmesh.cpp"
>
</File>
<File
RelativePath=".\DXUT\SDKmesh.h"
>
</File>
</Filter>
<Filter
Name="bvl"
>
<File
RelativePath="..\..\source\BandiVideoLibrary.cpp"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="0"
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|x64"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="0"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="0"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|x64"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="0"
/>
</FileConfiguration>
</File>
<File
RelativePath="..\..\source\BandiVideoLibrary.h"
>
</File>
<File
RelativePath="..\..\source\BandiVideoTexture.h"
>
</File>
<File
RelativePath="..\..\source\BandiVideoTexture_DX9.cpp"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="0"
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|x64"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="0"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="0"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|x64"
>
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="0"
/>
</FileConfiguration>
</File>
<File
RelativePath="..\..\source\BandiVideoTexture_DX9.h"
>
</File>
</Filter>
<File
RelativePath=".\ReadMe.txt"
>
</File>
</Files>
<Globals>
</Globals>
</VisualStudioProject>
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,189 @@
//--------------------------------------------------------------------------------------
// File: DXUT.h
//
// DirectX SDK Direct3D sample framework
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//--------------------------------------------------------------------------------------
#pragma once
#ifndef DXUT_H
#define DXUT_H
#ifndef UNICODE
#error "The sample framework requires a Unicode build. If you are using Microsoft Visual C++ .NET, under the General tab of the project properties change the Character Set to 'Use Unicode Character Set'."
#endif
//--------------------------------------------------------------------------------------
// Structs
//--------------------------------------------------------------------------------------
class CD3DEnumeration;
class CD3DSettingsDlg;
struct DXUTDeviceSettings
{
UINT AdapterOrdinal;
D3DDEVTYPE DeviceType;
D3DFORMAT AdapterFormat;
DWORD BehaviorFlags;
D3DPRESENT_PARAMETERS pp;
};
//--------------------------------------------------------------------------------------
// Error codes
//--------------------------------------------------------------------------------------
#define DXUTERR_NODIRECT3D MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0901)
#define DXUTERR_NOCOMPATIBLEDEVICES MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0902)
#define DXUTERR_MEDIANOTFOUND MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0903)
#define DXUTERR_NONZEROREFCOUNT MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0904)
#define DXUTERR_CREATINGDEVICE MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0905)
#define DXUTERR_RESETTINGDEVICE MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0906)
#define DXUTERR_CREATINGDEVICEOBJECTS MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0907)
#define DXUTERR_RESETTINGDEVICEOBJECTS MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0908)
#define DXUTERR_INCORRECTVERSION MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0909)
//--------------------------------------------------------------------------------------
// Callback registration
//--------------------------------------------------------------------------------------
typedef bool (CALLBACK *LPDXUTCALLBACKISDEVICEACCEPTABLE)( D3DCAPS9* pCaps, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat, bool bWindowed );
typedef void (CALLBACK *LPDXUTCALLBACKMODIFYDEVICESETTINGS)( DXUTDeviceSettings* pDeviceSettings, const D3DCAPS9* pCaps );
typedef HRESULT (CALLBACK *LPDXUTCALLBACKDEVICECREATED)( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc );
typedef HRESULT (CALLBACK *LPDXUTCALLBACKDEVICERESET)( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc );
typedef void (CALLBACK *LPDXUTCALLBACKDEVICEDESTROYED)();
typedef void (CALLBACK *LPDXUTCALLBACKDEVICELOST)();
typedef void (CALLBACK *LPDXUTCALLBACKFRAMEMOVE)( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime );
typedef void (CALLBACK *LPDXUTCALLBACKFRAMERENDER)( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime );
typedef void (CALLBACK *LPDXUTCALLBACKKEYBOARD)( UINT nChar, bool bKeyDown, bool bAltDown );
typedef void (CALLBACK *LPDXUTCALLBACKMOUSE)( bool bLeftButtonDown, bool bRightButtonDown, bool bMiddleButtonDown, bool bSideButton1Down, bool bSideButton2Down, int nMouseWheelDelta, int xPos, int yPos );
typedef LRESULT (CALLBACK *LPDXUTCALLBACKMSGPROC)( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, bool* pbNoFurtherProcessing );
typedef void (CALLBACK *LPDXUTCALLBACKTIMER)( UINT idEvent );
// Device callbacks
void DXUTSetCallbackDeviceCreated( LPDXUTCALLBACKDEVICECREATED pCallbackDeviceCreated );
void DXUTSetCallbackDeviceReset( LPDXUTCALLBACKDEVICERESET pCallbackDeviceReset );
void DXUTSetCallbackDeviceLost( LPDXUTCALLBACKDEVICELOST pCallbackDeviceLost );
void DXUTSetCallbackDeviceDestroyed( LPDXUTCALLBACKDEVICEDESTROYED pCallbackDeviceDestroyed );
// Frame callbacks
void DXUTSetCallbackFrameMove( LPDXUTCALLBACKFRAMEMOVE pCallbackFrameMove );
void DXUTSetCallbackFrameRender( LPDXUTCALLBACKFRAMERENDER pCallbackFrameRender );
// Message callbacks
void DXUTSetCallbackKeyboard( LPDXUTCALLBACKKEYBOARD pCallbackKeyboard );
void DXUTSetCallbackMouse( LPDXUTCALLBACKMOUSE pCallbackMouse, bool bIncludeMouseMove = false );
void DXUTSetCallbackMsgProc( LPDXUTCALLBACKMSGPROC pCallbackMsgProc );
//--------------------------------------------------------------------------------------
// Initialization
//--------------------------------------------------------------------------------------
HRESULT DXUTInit( bool bParseCommandLine = true, bool bHandleDefaultHotkeys = true, bool bShowMsgBoxOnError = true );
// Choose either DXUTCreateWindow or DXUTSetWindow. If using DXUTSetWindow, consider using DXUTStaticWndProc
HRESULT DXUTCreateWindow( const WCHAR* strWindowTitle = L"Direct3D Window",
HINSTANCE hInstance = NULL, HICON hIcon = NULL, HMENU hMenu = NULL,
int x = CW_USEDEFAULT, int y = CW_USEDEFAULT );
HRESULT DXUTSetWindow( HWND hWndFocus, HWND hWndDeviceFullScreen, HWND hWndDeviceWindowed, bool bHandleMessages = true );
LRESULT CALLBACK DXUTStaticWndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
// Choose either DXUTCreateDevice or DXUTSetDevice or DXUTCreateDeviceFromSettings
HRESULT DXUTCreateDevice( UINT AdapterOrdinal = D3DADAPTER_DEFAULT, bool bWindowed = true,
int nSuggestedWidth = 640, int nSuggestedHeight = 480,
LPDXUTCALLBACKISDEVICEACCEPTABLE pCallbackIsDeviceAcceptable = NULL,
LPDXUTCALLBACKMODIFYDEVICESETTINGS pCallbackModifyDeviceSettings = NULL );
HRESULT DXUTCreateDeviceFromSettings( DXUTDeviceSettings* pDeviceSettings, bool bPreserveInput = false );
HRESULT DXUTSetDevice( IDirect3DDevice9* pd3dDevice );
// Choose either DXUTMainLoop or implement your own main loop
HRESULT DXUTMainLoop( HACCEL hAccel = NULL );
// If not using DXUTMainLoop consider using DXUTRender3DEnvironment
void DXUTRender3DEnvironment();
//--------------------------------------------------------------------------------------
// Finding valid device settings
//--------------------------------------------------------------------------------------
enum DXUT_MATCH_TYPE
{
DXUTMT_IGNORE_INPUT = 0, // Use the closest valid value to a default
DXUTMT_PRESERVE_INPUT, // Use input without change, but may cause no valid device to be found
DXUTMT_CLOSEST_TO_INPUT // Use the closest valid value to the input
};
struct DXUTMatchOptions
{
DXUT_MATCH_TYPE eAdapterOrdinal;
DXUT_MATCH_TYPE eDeviceType;
DXUT_MATCH_TYPE eWindowed;
DXUT_MATCH_TYPE eAdapterFormat;
DXUT_MATCH_TYPE eVertexProcessing;
DXUT_MATCH_TYPE eResolution;
DXUT_MATCH_TYPE eBackBufferFormat;
DXUT_MATCH_TYPE eBackBufferCount;
DXUT_MATCH_TYPE eMultiSample;
DXUT_MATCH_TYPE eSwapEffect;
DXUT_MATCH_TYPE eDepthFormat;
DXUT_MATCH_TYPE eStencilFormat;
DXUT_MATCH_TYPE ePresentFlags;
DXUT_MATCH_TYPE eRefreshRate;
DXUT_MATCH_TYPE ePresentInterval;
};
HRESULT DXUTFindValidDeviceSettings( DXUTDeviceSettings* pOut, DXUTDeviceSettings* pIn = NULL, DXUTMatchOptions* pMatchOptions = NULL );
//--------------------------------------------------------------------------------------
// Common Tasks
//--------------------------------------------------------------------------------------
void DXUTSetCursorSettings( bool bShowCursorWhenFullScreen, bool bClipCursorWhenFullScreen );
void DXUTSetMultimonSettings( bool bAutoChangeAdapter );
void DXUTSetShortcutKeySettings( bool bAllowWhenFullscreen = false, bool bAllowWhenWindowed = true ); // Controls the Windows key, and accessibility shortcut keys
void DXUTSetConstantFrameTime( bool bConstantFrameTime, float fTimePerFrame = 0.0333f );
void DXUTSetShowSettingsDialog( bool bShow );
HRESULT DXUTSetTimer( LPDXUTCALLBACKTIMER pCallbackTimer, float fTimeoutInSecs = 1.0f, UINT* pnIDEvent = NULL );
HRESULT DXUTKillTimer( UINT nIDEvent );
HRESULT DXUTToggleFullScreen();
HRESULT DXUTToggleREF();
void DXUTPause( bool bPauseTime, bool bPauseRendering );
void DXUTResetFrameworkState();
void DXUTShutdown();
//--------------------------------------------------------------------------------------
// State Retrieval
//--------------------------------------------------------------------------------------
IDirect3D9* DXUTGetD3DObject(); // Does not addref unlike typical Get* APIs
IDirect3DDevice9* DXUTGetD3DDevice(); // Does not addref unlike typical Get* APIs
DXUTDeviceSettings DXUTGetDeviceSettings();
D3DPRESENT_PARAMETERS DXUTGetPresentParameters();
const D3DSURFACE_DESC* DXUTGetBackBufferSurfaceDesc();
const D3DCAPS9* DXUTGetDeviceCaps();
HWND DXUTGetHWND();
HWND DXUTGetHWNDFocus();
HWND DXUTGetHWNDDeviceFullScreen();
HWND DXUTGetHWNDDeviceWindowed();
const RECT& DXUTGetWindowClientRect();
double DXUTGetTime();
float DXUTGetElapsedTime();
bool DXUTIsWindowed();
float DXUTGetFPS();
LPCWSTR DXUTGetWindowTitle();
LPCWSTR DXUTGetFrameStats();
LPCWSTR DXUTGetDeviceStats();
bool DXUTGetShowSettingsDialog();
bool DXUTIsRenderingPaused();
bool DXUTIsTimePaused();
int DXUTGetExitCode();
bool DXUTIsKeyDown( BYTE vKey ); // Pass a virtual-key code, ex. VK_F1, 'A', VK_RETURN, VK_LSHIFT, etc
bool DXUTIsMouseButtonDown( BYTE vButton ); // Pass a virtual-key code: VK_LBUTTON, VK_RBUTTON, VK_MBUTTON, VK_XBUTTON1, VK_XBUTTON2
#endif
@@ -0,0 +1,544 @@
//-----------------------------------------------------------------------------
// File: DXUTEffectMap.cpp
//
// Desc: Maps the set of standard semantics and annotations to a collection
// of ID3DXEffect objects.
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
#include "stdafx.h"
#include "dxstdafx.h"
//-------------------------------------------------------------------------------------
DXUT_SEMANTIC CDXUTEffectMap::StringToSemantic( const char* cstrSemantic )
{
char strSemantic[MAX_PATH+1] = {0};
RemoveTrailingNumber( strSemantic, MAX_PATH, cstrSemantic );
if( StringEquals( strSemantic, "Diffuse" ) ) return DXUT_Diffuse;
if( StringEquals( strSemantic, "Specular" ) ) return DXUT_Specular;
if( StringEquals( strSemantic, "Ambient" ) ) return DXUT_Ambient;
if( StringEquals( strSemantic, "SpecularPower" ) ) return DXUT_SpecularPower;
if( StringEquals( strSemantic, "Emissive" ) ) return DXUT_Emissive;
if( StringEquals( strSemantic, "Normal" ) ) return DXUT_Normal;
if( StringEquals( strSemantic, "Height" ) ) return DXUT_Height;
if( StringEquals( strSemantic, "Refraction" ) ) return DXUT_Refraction;
if( StringEquals( strSemantic, "Opacity" ) ) return DXUT_Opacity;
if( StringEquals( strSemantic, "Environment" ) ) return DXUT_Environment;
if( StringEquals( strSemantic, "EnvironmentNormal" ) ) return DXUT_EnvironmentNormal;
if( StringEquals( strSemantic, "Fresnel" ) ) return DXUT_Fresnel;
if( StringEquals( strSemantic, "World" ) ) return DXUT_World;
if( StringEquals( strSemantic, "WorldInverse" ) ) return DXUT_WorldInverse;
if( StringEquals( strSemantic, "WorldInverseTranspose" ) ) return DXUT_WorldInverseTranspose;
if( StringEquals( strSemantic, "WorldView" ) ) return DXUT_WorldView;
if( StringEquals( strSemantic, "WorldViewInverse" ) ) return DXUT_WorldViewInverse;
if( StringEquals( strSemantic, "WorldViewInverseTranspose" ) ) return DXUT_WorldViewInverseTranspose;
if( StringEquals( strSemantic, "WorldViewProjection" ) ) return DXUT_WorldViewProjection;
if( StringEquals( strSemantic, "WorldViewProjectionInverse" ) ) return DXUT_WorldViewProjectionInverse;
if( StringEquals( strSemantic, "WorldViewProjectionInverseTranspose" ) ) return DXUT_WorldViewProjectionInverseTranspose;
if( StringEquals( strSemantic, "View" ) ) return DXUT_View;
if( StringEquals( strSemantic, "ViewInverse" ) ) return DXUT_ViewInverse;
if( StringEquals( strSemantic, "ViewInverseTranspose" ) ) return DXUT_ViewInverseTranspose;
if( StringEquals( strSemantic, "ViewProjection" ) ) return DXUT_ViewProjection;
if( StringEquals( strSemantic, "ViewProjectionInverse" ) ) return DXUT_ViewProjectionInverse;
if( StringEquals( strSemantic, "ViewProjectionInverseTranspose" ) ) return DXUT_ViewProjectionInverseTranspose;
if( StringEquals( strSemantic, "Projection" ) ) return DXUT_Projection;
if( StringEquals( strSemantic, "ProjectionInverse" ) ) return DXUT_ProjectionInverse;
if( StringEquals( strSemantic, "ProjectionInverseTranspose" ) ) return DXUT_ProjectionInverseTranspose;
if( StringEquals( strSemantic, "RenderTargetDimensions" ) ) return DXUT_RenderTargetDimensions;
if( StringEquals( strSemantic, "RenderTargetClipping" ) ) return DXUT_RenderTargetClipping;
if( StringEquals( strSemantic, "Time" ) ) return DXUT_Time;
if( StringEquals( strSemantic, "LastTime" ) ) return DXUT_LastTime;
if( StringEquals( strSemantic, "ElapsedTime" ) ) return DXUT_ElapsedTime;
if( StringEquals( strSemantic, "Position" ) ) return DXUT_Position;
if( StringEquals( strSemantic, "Direction" ) ) return DXUT_Direction;
if( StringEquals( strSemantic, "BoundingCenter" ) ) return DXUT_BoundingCenter;
if( StringEquals( strSemantic, "BoundingSphereSize" ) ) return DXUT_BoundingSphereSize;
if( StringEquals( strSemantic, "BoundingSphereMin" ) ) return DXUT_BoundingSphereMin;
if( StringEquals( strSemantic, "BoundingSphereMax" ) ) return DXUT_BoundingSphereMax;
if( StringEquals( strSemantic, "BoundingBoxSize" ) ) return DXUT_BoundingBoxSize;
if( StringEquals( strSemantic, "BoundingBoxMin" ) ) return DXUT_BoundingBoxMin;
if( StringEquals( strSemantic, "BoundingBoxMax" ) ) return DXUT_BoundingBoxMax;
if( StringEquals( strSemantic, "Attenuation" ) ) return DXUT_Attenuation;
if( StringEquals( strSemantic, "RenderColorTarget" ) ) return DXUT_RenderColorTarget;
if( StringEquals( strSemantic, "RenderDepthStencilTarget" ) ) return DXUT_RenderDepthStencilTarget;
if( StringEquals( strSemantic, "UnitsScale" ) ) return DXUT_UnitsScale;
if( StringEquals( strSemantic, "StandardsGlobal" ) ) return DXUT_StandardsGlobal;
return DXUT_UNKNOWN_SEMANTIC;
}
//-------------------------------------------------------------------------------------
DXUT_SEMANTIC CDXUTEffectMap::StringToSemantic( const WCHAR* strSemantic )
{
char cstr[MAX_PATH+1] = {0};
WideCharToMultiByte( CP_ACP, 0, strSemantic, -1, cstr, MAX_PATH, NULL, NULL );
return StringToSemantic( cstr );
}
//-------------------------------------------------------------------------------------
DXUT_OBJECT CDXUTEffectMap::StringToObject( const char* cstrObject )
{
char strObject[MAX_PATH+1] = {0};
RemoveTrailingNumber( strObject, MAX_PATH, cstrObject );
if( StringEquals( strObject, "Geometry" ) ) return DXUT_Geometry;
if( StringEquals( strObject, "Light" ) ) return DXUT_Light;
if( StringEquals( strObject, "Camera" ) ) return DXUT_Camera;
if( StringEquals( strObject, "Frame" ) ) return DXUT_Frame;
return DXUT_UNKNOWN_OBJECT;
}
//-------------------------------------------------------------------------------------
DXUT_OBJECT CDXUTEffectMap::StringToObject( const WCHAR* strObject )
{
char cstr[MAX_PATH+1] = {0};
WideCharToMultiByte( CP_ACP, 0, strObject, -1, cstr, MAX_PATH, NULL, NULL );
return StringToObject( cstr );
}
//-------------------------------------------------------------------------------------
VOID CDXUTEffectMap::Reset()
{
D3DXMatrixIdentity( &m_matWorld );
D3DXMatrixIdentity( &m_matView );
D3DXMatrixIdentity( &m_matProjection );
// Reset all the stored parameter lists
for( UINT iSemantic = 0; iSemantic < NUM_DXUT_SEMANTICS; iSemantic++ )
{
for( UINT iObject = 0; iObject < NUM_DXUT_OBJECTS; iObject++ )
{
for( UINT iIndex = 0; iIndex < MAX_INDEX; iIndex++ )
{
CGrowableArray<ParamList>* pBinding = &m_Bindings[ iSemantic ][ iObject ][ iIndex ];
// Clear nested arrays first
for( int iParamList = 0; iParamList < pBinding->GetSize(); iParamList++ )
{
pBinding->GetAt( iParamList ).Reset();
}
// Remove all the bound parameter lists
pBinding->RemoveAll();
}
}
}
}
//-------------------------------------------------------------------------------------
HRESULT CDXUTEffectMap::SetStandardParameter( const WCHAR* strSemantic,
const WCHAR* strObject,
DWORD dwObjectIndex,
float* pData,
DWORD dwDataLen,
const WCHAR* strType,
const WCHAR* strUnits,
const WCHAR* strSpace )
{
// Map the semantic to the standard set
DXUT_SEMANTIC eSemantic = StringToSemantic( strSemantic );
if( eSemantic == DXUT_UNKNOWN_SEMANTIC )
return E_FAIL;
// Map the object to the standard set
DXUT_OBJECT eObject = StringToObject( strObject );
if( eObject == DXUT_UNKNOWN_OBJECT )
return E_FAIL;
return SetStandardParameter( eSemantic, eObject, dwObjectIndex, pData, dwDataLen, strType, strUnits, strSpace );
}
//-------------------------------------------------------------------------------------
HRESULT CDXUTEffectMap::SetStandardParameter( DXUT_SEMANTIC eSemantic,
DXUT_OBJECT eObject,
DWORD dwObjectIndex,
float* pData,
DWORD dwDataLen,
const WCHAR* strType,
const WCHAR* strUnits,
const WCHAR* strSpace )
{
HRESULT hr;
// TODO: remove index limits
if( dwObjectIndex >= MAX_INDEX )
return E_INVALIDARG;
// TODO: handle unit and space conversions
// Retrieve the interested handles
CGrowableArray<ParamList>* pBindings = &m_Bindings[ eSemantic ][ eObject ][ dwObjectIndex ];
for( int iList=0; iList < pBindings->GetSize(); iList++ )
{
ParamList& paramList = pBindings->GetAt(iList);
for( int iParam=0; iParam < paramList.ahParameters.GetSize(); iParam++ )
{
V_RETURN( paramList.pEffect->SetFloatArray( paramList.ahParameters[iParam], pData, dwDataLen ) );
}
}
return S_OK;
}
void ParamList::Reset()
{
SAFE_RELEASE(pEffect);
ahParameters.RemoveAll();
}
//-------------------------------------------------------------------------------------
// Investigates all the parameters, looking at semantics and annotations and placing
// handles to these parameters within the internal database.
//-------------------------------------------------------------------------------------
HRESULT CDXUTEffectMap::AddEffect( ID3DXEffect* pEffect )
{
HRESULT hr;
if( pEffect == NULL )
return E_INVALIDARG;
// Get the number of parameters
D3DXEFFECT_DESC descEffect;
V_RETURN( pEffect->GetDesc( &descEffect ) );
// Enumerate the parameters
for( UINT iParam=0; iParam < descEffect.Parameters; iParam++ )
{
// Retrieve param
D3DXHANDLE hParameter = pEffect->GetParameter( NULL, iParam );
if( NULL == hParameter )
return E_FAIL;
// Grab description
D3DXPARAMETER_DESC desc;
V_RETURN( pEffect->GetParameterDesc( hParameter, &desc ) );
// If this parameter doesn't have a semantic, skip to the next parameter
if( desc.Semantic == NULL )
continue;
// Map the semantic to the standard set
DXUT_SEMANTIC eSemantic = StringToSemantic( desc.Semantic );
if( eSemantic == DXUT_UNKNOWN_SEMANTIC )
continue;
// Get the object annotation
const char* cstrObject = "Geometry";
D3DXHANDLE hAnnotation = pEffect->GetAnnotationByName( hParameter, "Object" );
if( hAnnotation )
{
V_RETURN( pEffect->GetString( hAnnotation, &cstrObject ) );
}
// Map the object to the standard set
DXUT_OBJECT eObject = StringToObject( cstrObject );
if( eObject == DXUT_UNKNOWN_OBJECT )
continue;
// Extract the index from the semantic
int index = 0;
const char* strIndex = desc.Semantic + strlen(desc.Semantic)-1;
// If there is a digit at the end of the semantic, locate the beginning of the index
// and convert to an integer
if( isdigit( (BYTE) (*strIndex) ) )
{
while( isdigit( (BYTE) (*(strIndex-1)) ) )
{
--strIndex;
}
index = atoi( strIndex );
}
// Check whether index is out of bounds
if( index < 0 || index >= MAX_INDEX )
continue;
// Store the handle
CGrowableArray<ParamList>* pBindings = &m_Bindings[ eSemantic ][ eObject ][ index ];
bool bBound = false;
for( int i=0; i < pBindings->GetSize(); i++ )
{
if( pBindings->GetAt(i).pEffect == pEffect )
{
// Found the containing effect for this parameter in the list, add the new handle
pBindings->GetAt(i).ahParameters.Add( hParameter );
bBound = true;
break;
}
}
if( !bBound )
{
// This parameter belongs to a new effect
ParamList newParamList;
newParamList.pEffect = pEffect;
pEffect->AddRef();
newParamList.ahParameters.Add( hParameter );
pBindings->Add( newParamList );
}
}
return S_OK;
}
//-------------------------------------------------------------------------------------
// Removes all instances of this effect from the binding list
//-------------------------------------------------------------------------------------
HRESULT CDXUTEffectMap::RemoveEffect( ID3DXEffect* pEffect )
{
if( pEffect == NULL )
return E_INVALIDARG;
// Search through the list of registered semantics and remove all items
// assigned to the given effect
for( UINT iSemantic = 0; iSemantic < NUM_DXUT_SEMANTICS; iSemantic++ )
{
for( UINT iObject = 0; iObject < NUM_DXUT_OBJECTS; iObject++ )
{
for( UINT iIndex = 0; iIndex < MAX_INDEX; iIndex++ )
{
CGrowableArray<ParamList>* pBinding = &m_Bindings[ iSemantic ][ iObject ][ iIndex ];
// Clear nested arrays first
for( int iParamList = 0; iParamList < pBinding->GetSize(); iParamList++ )
{
ParamList& rParamList = pBinding->GetAt( iParamList );
if( rParamList.pEffect == pEffect )
rParamList.Reset();
}
}
}
}
return S_OK;
}
//-------------------------------------------------------------------------------------
HRESULT CDXUTEffectMap::SetWorldMatrix( D3DXMATRIXA16* pWorldMatrix, const WCHAR* strUnits )
{
m_matWorld = *pWorldMatrix;
return UpdateTransforms( DXUT_World );
}
//-------------------------------------------------------------------------------------
HRESULT CDXUTEffectMap::SetViewMatrix( D3DXMATRIXA16* pViewMatrix, const WCHAR* strUnits )
{
m_matView = *pViewMatrix;
return UpdateTransforms( DXUT_View );
}
//-------------------------------------------------------------------------------------
HRESULT CDXUTEffectMap::SetProjectionMatrix( D3DXMATRIXA16* pProjectionMatrix )
{
m_matProjection = *pProjectionMatrix;
return UpdateTransforms( DXUT_Projection );
}
//-------------------------------------------------------------------------------------
HRESULT CDXUTEffectMap::UpdateTransforms( DXUT_SEMANTIC eSemantic, const WCHAR* strUnits )
{
HRESULT hr;
// Determine which transforms are required by the effect
bool bEffectContains[ NUM_DXUT_SEMANTICS ] = {0};
for( int iTransform = DXUT_World; iTransform <= DXUT_ProjectionInverseTranspose; iTransform++ )
{
bEffectContains[iTransform] = ( m_Bindings[ iTransform ][ DXUT_Geometry ][ 0 ].GetSize() > 0 );
}
if( eSemantic == DXUT_World )
{
// World matrix permutations
if( bEffectContains[ DXUT_World ] ||
bEffectContains[ DXUT_WorldInverse ] ||
bEffectContains[ DXUT_WorldInverseTranspose ] )
{
V_RETURN( SetStandardParameter( DXUT_World, DXUT_Geometry, 0, (float*)&m_matWorld, 16, L"", strUnits, L"World" ) );
if( bEffectContains[ DXUT_WorldInverse ] ||
bEffectContains[ DXUT_WorldInverseTranspose ] )
{
D3DXMATRIXA16 matWorldInverse;
D3DXMatrixInverse( &matWorldInverse, NULL, &m_matWorld );
V_RETURN( SetStandardParameter( DXUT_WorldInverse, DXUT_Geometry, 0, (float*)&matWorldInverse, 16, L"", strUnits, L"World" ) );
if( bEffectContains[ DXUT_WorldInverseTranspose ] )
{
D3DXMATRIXA16 matWorldInverseTranspose;
D3DXMatrixTranspose( &matWorldInverseTranspose, &matWorldInverse );
V_RETURN( SetStandardParameter( DXUT_WorldInverseTranspose, DXUT_Geometry, 0, (float*)&matWorldInverseTranspose, 16, L"", strUnits, L"World" ) );
}
}
}
}
if( eSemantic == DXUT_World ||
eSemantic == DXUT_View )
{
// WorldView matrix permutations
if( bEffectContains[ DXUT_WorldView ] ||
bEffectContains[ DXUT_WorldViewInverse ] ||
bEffectContains[ DXUT_WorldViewInverseTranspose ] )
{
D3DXMATRIXA16 matWorldView;
D3DXMatrixMultiply( &matWorldView, &m_matWorld, &m_matView );
V_RETURN( SetStandardParameter( DXUT_WorldView, DXUT_Geometry, 0, (float*)&matWorldView, 16, L"", strUnits, L"World" ) );
if( bEffectContains[ DXUT_WorldViewInverse ] ||
bEffectContains[ DXUT_WorldViewInverseTranspose ] )
{
D3DXMATRIXA16 matWorldViewInverse;
D3DXMatrixInverse( &matWorldViewInverse, NULL, &matWorldView );
V_RETURN( SetStandardParameter( DXUT_WorldViewInverse, DXUT_Geometry, 0, (float*)&matWorldViewInverse, 16, L"", strUnits, L"World" ) );
if( bEffectContains[ DXUT_WorldViewInverseTranspose ] )
{
D3DXMATRIXA16 matWorldViewInverseTranspose;
D3DXMatrixTranspose( &matWorldViewInverseTranspose, &matWorldViewInverse );
V_RETURN( SetStandardParameter( DXUT_WorldViewInverseTranspose, DXUT_Geometry, 0, (float*)&matWorldViewInverseTranspose, 16, L"", strUnits, L"World" ) );
}
}
}
}
if( eSemantic == DXUT_World ||
eSemantic == DXUT_View ||
eSemantic == DXUT_Projection )
{
// WorldViewProjection matrix permutations
if( bEffectContains[ DXUT_WorldViewProjection ] ||
bEffectContains[ DXUT_WorldViewProjectionInverse ] ||
bEffectContains[ DXUT_WorldViewProjectionInverseTranspose ] )
{
D3DXMATRIXA16 matWorldViewProjection;
D3DXMatrixMultiply( &matWorldViewProjection, &m_matWorld, &m_matView );
D3DXMatrixMultiply( &matWorldViewProjection, &matWorldViewProjection, &m_matProjection );
V_RETURN( SetStandardParameter( DXUT_WorldViewProjection, DXUT_Geometry, 0, (float*)&matWorldViewProjection, 16, L"", strUnits, L"World" ) );
if( bEffectContains[ DXUT_WorldViewProjectionInverse ] ||
bEffectContains[ DXUT_WorldViewProjectionInverseTranspose ] )
{
D3DXMATRIXA16 matWorldViewProjectionInverse;
D3DXMatrixInverse( &matWorldViewProjectionInverse, NULL, &matWorldViewProjection );
V_RETURN( SetStandardParameter( DXUT_WorldViewProjectionInverse, DXUT_Geometry, 0, (float*)&matWorldViewProjectionInverse, 16, L"", strUnits, L"World" ) );
if( bEffectContains[ DXUT_WorldViewProjectionInverseTranspose ] )
{
D3DXMATRIXA16 matWorldViewProjectionInverseTranspose;
D3DXMatrixTranspose( &matWorldViewProjectionInverseTranspose, &matWorldViewProjectionInverse );
V_RETURN( SetStandardParameter( DXUT_WorldViewProjectionInverseTranspose, DXUT_Geometry, 0, (float*)&matWorldViewProjectionInverseTranspose, 16, L"", strUnits, L"World" ) );
}
}
}
}
if( eSemantic == DXUT_View )
{
// View matrix permutations
if( bEffectContains[ DXUT_View ] ||
bEffectContains[ DXUT_ViewInverse ] ||
bEffectContains[ DXUT_ViewInverseTranspose ] )
{
V_RETURN( SetStandardParameter( DXUT_View, DXUT_Geometry, 0, (float*)&m_matView, 16, L"", strUnits, L"World" ) );
if( bEffectContains[ DXUT_ViewInverse ] ||
bEffectContains[ DXUT_ViewInverseTranspose ] )
{
D3DXMATRIXA16 matViewInverse;
D3DXMatrixInverse( &matViewInverse, NULL, &m_matView );
V_RETURN( SetStandardParameter( DXUT_ViewInverse, DXUT_Geometry, 0, (float*)&matViewInverse, 16, L"", strUnits, L"World" ) );
if( bEffectContains[ DXUT_ViewInverseTranspose ] )
{
D3DXMATRIXA16 matViewInverseTranspose;
D3DXMatrixTranspose( &matViewInverseTranspose, &matViewInverse );
V_RETURN( SetStandardParameter( DXUT_ViewInverseTranspose, DXUT_Geometry, 0, (float*)&matViewInverseTranspose, 16, L"", strUnits, L"World" ) );
}
}
}
}
if( eSemantic == DXUT_View ||
eSemantic == DXUT_Projection )
{
// ViewProjection matrix permutations
if( bEffectContains[ DXUT_ViewProjection ] ||
bEffectContains[ DXUT_ViewProjectionInverse ] ||
bEffectContains[ DXUT_ViewProjectionInverseTranspose ] )
{
D3DXMATRIXA16 matViewProjection;
D3DXMatrixMultiply( &matViewProjection, &m_matView, &m_matProjection );
V_RETURN( SetStandardParameter( DXUT_ViewProjection, DXUT_Geometry, 0, (float*)&matViewProjection, 16, L"", strUnits, L"World" ) );
if( bEffectContains[ DXUT_ViewProjectionInverse ] ||
bEffectContains[ DXUT_ViewProjectionInverseTranspose ] )
{
D3DXMATRIXA16 matViewProjectionInverse;
D3DXMatrixInverse( &matViewProjectionInverse, NULL, &matViewProjection );
V_RETURN( SetStandardParameter( DXUT_ViewProjectionInverse, DXUT_Geometry, 0, (float*)&matViewProjectionInverse, 16, L"", strUnits, L"World" ) );
if( bEffectContains[ DXUT_ViewProjectionInverseTranspose ] )
{
D3DXMATRIXA16 matViewProjectionInverseTranspose;
D3DXMatrixTranspose( &matViewProjectionInverseTranspose, &matViewProjectionInverse );
V_RETURN( SetStandardParameter( DXUT_ViewProjectionInverseTranspose, DXUT_Geometry, 0, (float*)&matViewProjectionInverseTranspose, 16, L"", strUnits, L"World" ) );
}
}
}
}
if( eSemantic == DXUT_Projection )
{
// Projection matrix permutations
if( bEffectContains[ DXUT_Projection ] ||
bEffectContains[ DXUT_ProjectionInverse ] ||
bEffectContains[ DXUT_ProjectionInverseTranspose ] )
{
V_RETURN( SetStandardParameter( DXUT_Projection, DXUT_Geometry, 0, (float*)&m_matProjection, 16, L"", strUnits, L"World" ) );
if( bEffectContains[ DXUT_ProjectionInverse ] ||
bEffectContains[ DXUT_ProjectionInverseTranspose ] )
{
D3DXMATRIXA16 matProjectionInverse;
D3DXMatrixInverse( &matProjectionInverse, NULL, &m_matProjection );
V_RETURN( SetStandardParameter( DXUT_ProjectionInverse, DXUT_Geometry, 0, (float*)&matProjectionInverse, 16, L"", strUnits, L"World" ) );
if( bEffectContains[ DXUT_ProjectionInverseTranspose ] )
{
D3DXMATRIXA16 matProjectionInverseTranspose;
D3DXMatrixTranspose( &matProjectionInverseTranspose, &matProjectionInverse );
V_RETURN( SetStandardParameter( DXUT_ProjectionInverseTranspose, DXUT_Geometry, 0, (float*)&matProjectionInverseTranspose, 16, L"", strUnits, L"World" ) );
}
}
}
}
return S_OK;
}
@@ -0,0 +1,164 @@
//-----------------------------------------------------------------------------
// File: DXUTEffectMap.h
//
// Desc: Maps the set of standard semantics and annotations to a collection
// of ID3DXEffect objects.
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
#pragma once
#ifndef DXUT_EFFECTMAP_H
#define DXUT_EFFECTMAP_H
const int MAX_INDEX = 5;
enum DXUT_SEMANTIC
{
DXUT_UNKNOWN_SEMANTIC,
DXUT_Diffuse,
DXUT_Specular,
DXUT_Ambient,
DXUT_SpecularPower,
DXUT_Emissive,
DXUT_Normal,
DXUT_Height,
DXUT_Refraction,
DXUT_Opacity,
DXUT_Environment,
DXUT_EnvironmentNormal,
DXUT_Fresnel,
DXUT_World,
DXUT_WorldInverse,
DXUT_WorldInverseTranspose,
DXUT_WorldView,
DXUT_WorldViewInverse,
DXUT_WorldViewInverseTranspose,
DXUT_WorldViewProjection,
DXUT_WorldViewProjectionInverse,
DXUT_WorldViewProjectionInverseTranspose,
DXUT_View,
DXUT_ViewInverse,
DXUT_ViewInverseTranspose,
DXUT_ViewProjection,
DXUT_ViewProjectionInverse,
DXUT_ViewProjectionInverseTranspose,
DXUT_Projection,
DXUT_ProjectionInverse,
DXUT_ProjectionInverseTranspose,
DXUT_RenderTargetDimensions,
DXUT_RenderTargetClipping,
DXUT_Time,
DXUT_LastTime,
DXUT_ElapsedTime,
DXUT_Position,
DXUT_Direction,
DXUT_BoundingCenter,
DXUT_BoundingSphereSize,
DXUT_BoundingSphereMin,
DXUT_BoundingSphereMax,
DXUT_BoundingBoxSize,
DXUT_BoundingBoxMin,
DXUT_BoundingBoxMax,
DXUT_Attenuation,
DXUT_RenderColorTarget,
DXUT_RenderDepthStencilTarget,
DXUT_UnitsScale,
DXUT_StandardsGlobal,
NUM_DXUT_SEMANTICS
};
enum DXUT_OBJECT
{
DXUT_UNKNOWN_OBJECT,
DXUT_Geometry,
DXUT_Light,
DXUT_Camera,
DXUT_Frame,
NUM_DXUT_OBJECTS
};
struct ParamList
{
ID3DXEffect* pEffect;
CGrowableArray< D3DXHANDLE > ahParameters;
void Reset();
};
class CDXUTEffectMap
{
public:
CDXUTEffectMap() { Reset(); }
~CDXUTEffectMap() { Reset(); }
VOID Reset();
HRESULT AddEffect( ID3DXEffect* pEffect );
HRESULT RemoveEffect( ID3DXEffect* pEffect );
HRESULT SetStandardParameter( const WCHAR* strSemantic, const WCHAR* strObject, DWORD dwObjectIndex, float* pData, DWORD dwDataLen, const WCHAR* strType = NULL, const WCHAR* strUnits = NULL, const WCHAR* strSpace = NULL );
HRESULT SetStandardParameter( DXUT_SEMANTIC eSemantic, DXUT_OBJECT eObject, DWORD dwObjectIndex, float* pData, DWORD dwDataLen, const WCHAR* strType = NULL, const WCHAR* strUnits = NULL, const WCHAR* strSpace = NULL );
HRESULT SetWorldMatrix( D3DXMATRIXA16* pWorldMatrix, const WCHAR* strUnits = NULL );
HRESULT SetViewMatrix( D3DXMATRIXA16* pViewMatrix, const WCHAR* strUnits = NULL );
HRESULT SetProjectionMatrix( D3DXMATRIXA16* pProjectionMatrix );
static DXUT_SEMANTIC StringToSemantic( const char* cstrSemantic );
static DXUT_SEMANTIC StringToSemantic( const WCHAR* strSemantic );
static DXUT_OBJECT StringToObject( const char* cstrObject );
static DXUT_OBJECT StringToObject( const WCHAR* strObject );
private:
HRESULT UpdateTransforms( DXUT_SEMANTIC eSemantic, const WCHAR* strUnits = L"m" );
D3DXMATRIXA16 m_matWorld;
D3DXMATRIXA16 m_matView;
D3DXMATRIXA16 m_matProjection;
// Database of DXUTEffect object parameter handles which are indexed accoring to
// Semantic, Object annotation, index, and containing mesh pointer
CGrowableArray<ParamList> m_Bindings[ NUM_DXUT_SEMANTICS ][ NUM_DXUT_OBJECTS ][ MAX_INDEX ];
};
//-------------------------------------------------------------------------------------
inline bool StringBegins( const char* strTest, const char* strStartsWith )
{
return ( 0 == _strnicmp( strTest, strStartsWith, strlen(strStartsWith) ) );
}
//-------------------------------------------------------------------------------------
inline bool StringEquals( const char* strTest, const char* strEquals )
{
return( 0 == _stricmp( strTest, strEquals ) );
}
//-------------------------------------------------------------------------------------
inline void RemoveTrailingNumber( char* strWithoutNumber, DWORD dwBufLen, const char* str )
{
StringCchCopyA( strWithoutNumber, dwBufLen, str );
char* strIndex = strWithoutNumber + strlen(strWithoutNumber);
// If there is a digit at the end of the semantic discard it
while( isdigit( (BYTE) (*(strIndex-1)) ) )
{
--strIndex;
}
*strIndex = 0;
}
#endif //DXUT_EFFECTMAP_H
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,138 @@
//-----------------------------------------------------------------------------
// File: DXUTMesh.h
//
// Desc: Support code for loading DirectX .X files.
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
#pragma once
#ifndef DXUTMESH_H
#define DXUTMESH_H
//-----------------------------------------------------------------------------
// Name: class CDXUTMesh
// Desc: Class for loading and rendering file-based meshes
//-----------------------------------------------------------------------------
class CDXUTMesh
{
public:
WCHAR m_strName[512];
LPD3DXMESH m_pSysMemMesh; // SysMem mesh, lives through resize
LPD3DXMESH m_pLocalMesh; // Local mesh, rebuilt on resize
DWORD m_dwNumMaterials; // Materials for the mesh
D3DMATERIAL9* m_pMaterials;
IDirect3DBaseTexture9** m_pTextures;
bool m_bUseMaterials;
public:
// Rendering
HRESULT Render( LPDIRECT3DDEVICE9 pd3dDevice,
bool bDrawOpaqueSubsets = true,
bool bDrawAlphaSubsets = true );
HRESULT Render( ID3DXEffect *pEffect,
D3DXHANDLE hTexture = NULL,
D3DXHANDLE hDiffuse = NULL,
D3DXHANDLE hAmbient = NULL,
D3DXHANDLE hSpecular = NULL,
D3DXHANDLE hEmissive = NULL,
D3DXHANDLE hPower = NULL,
bool bDrawOpaqueSubsets = true,
bool bDrawAlphaSubsets = true );
// Mesh access
LPD3DXMESH GetSysMemMesh() { return m_pSysMemMesh; }
LPD3DXMESH GetLocalMesh() { return m_pLocalMesh; }
// Rendering options
void UseMeshMaterials( bool bFlag ) { m_bUseMaterials = bFlag; }
HRESULT SetFVF( LPDIRECT3DDEVICE9 pd3dDevice, DWORD dwFVF );
HRESULT SetVertexDecl( LPDIRECT3DDEVICE9 pd3dDevice, const D3DVERTEXELEMENT9 *pDecl );
// Initializing
HRESULT RestoreDeviceObjects( LPDIRECT3DDEVICE9 pd3dDevice );
HRESULT InvalidateDeviceObjects();
// Creation/destruction
HRESULT Create( LPDIRECT3DDEVICE9 pd3dDevice, LPCWSTR strFilename );
HRESULT Create( LPDIRECT3DDEVICE9 pd3dDevice, LPD3DXFILEDATA pFileData );
HRESULT CreateMaterials( LPCWSTR strPath, IDirect3DDevice9 *pd3dDevice, ID3DXBuffer *pAdjacencyBuffer, ID3DXBuffer *pMtrlBuffer );
HRESULT Destroy();
CDXUTMesh( LPCWSTR strName = L"CDXUTMeshFile_Mesh" );
virtual ~CDXUTMesh();
};
//-----------------------------------------------------------------------------
// Name: class CDXUTMeshFrame
// Desc: Class for loading and rendering file-based meshes
//-----------------------------------------------------------------------------
class CDXUTMeshFrame
{
public:
WCHAR m_strName[512];
D3DXMATRIX m_mat;
CDXUTMesh* m_pMesh;
CDXUTMeshFrame* m_pNext;
CDXUTMeshFrame* m_pChild;
public:
// Matrix access
void SetMatrix( D3DXMATRIX* pmat ) { m_mat = *pmat; }
D3DXMATRIX* GetMatrix() { return &m_mat; }
CDXUTMesh* FindMesh( LPCWSTR strMeshName );
CDXUTMeshFrame* FindFrame( LPCWSTR strFrameName );
bool EnumMeshes( bool (*EnumMeshCB)(CDXUTMesh*,void*),
void* pContext );
HRESULT Destroy();
HRESULT RestoreDeviceObjects( LPDIRECT3DDEVICE9 pd3dDevice );
HRESULT InvalidateDeviceObjects();
HRESULT Render( LPDIRECT3DDEVICE9 pd3dDevice,
bool bDrawOpaqueSubsets = true,
bool bDrawAlphaSubsets = true,
D3DXMATRIX* pmatWorldMatrix = NULL);
CDXUTMeshFrame( LPCWSTR strName = L"CDXUTMeshFile_Frame" );
virtual ~CDXUTMeshFrame();
};
//-----------------------------------------------------------------------------
// Name: class CDXUTMeshFile
// Desc: Class for loading and rendering file-based meshes
//-----------------------------------------------------------------------------
class CDXUTMeshFile : public CDXUTMeshFrame
{
HRESULT LoadMesh( LPDIRECT3DDEVICE9 pd3dDevice, LPD3DXFILEDATA pFileData,
CDXUTMeshFrame* pParentFrame );
HRESULT LoadFrame( LPDIRECT3DDEVICE9 pd3dDevice, LPD3DXFILEDATA pFileData,
CDXUTMeshFrame* pParentFrame );
public:
HRESULT Create( LPDIRECT3DDEVICE9 pd3dDevice, LPCWSTR strFilename );
HRESULT CreateFromResource( LPDIRECT3DDEVICE9 pd3dDevice, LPCWSTR strResource, LPCWSTR strType );
// For pure devices, specify the world transform. If the world transform is not
// specified on pure devices, this function will fail.
HRESULT Render( LPDIRECT3DDEVICE9 pd3dDevice, D3DXMATRIX* pmatWorldMatrix = NULL );
CDXUTMeshFile() : CDXUTMeshFrame( L"CDXUTMeshFile_Root" ) {}
};
#endif
@@ -0,0 +1,870 @@
//--------------------------------------------------------------------------------------
// File: DXUTEnum.cpp
//
// Enumerates D3D adapters, devices, modes, etc.
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//--------------------------------------------------------------------------------------
#include "stdafx.h"
#include "dxstdafx.h"
//--------------------------------------------------------------------------------------
// Forward declarations
//--------------------------------------------------------------------------------------
static int __cdecl SortModesCallback( const void* arg1, const void* arg2 );
UINT DXUTStencilBits( D3DFORMAT fmt );
UINT DXUTDepthBits( D3DFORMAT fmt );
UINT DXUTAlphaChannelBits( D3DFORMAT fmt );
UINT DXUTColorChannelBits( D3DFORMAT fmt );
CD3DEnumeration* DXUTGetEnumeration()
{
// Using an accessor function gives control of the construction order
static CD3DEnumeration d3denum;
return &d3denum;
}
//--------------------------------------------------------------------------------------
CD3DEnumeration::CD3DEnumeration()
{
m_pD3D = NULL;
m_IsDeviceAcceptableFunc = NULL;
m_bRequirePostPixelShaderBlending = true;
m_nMinWidth = 0;
m_nMinHeight = 0;
m_nMaxWidth = UINT_MAX;
m_nMaxHeight = UINT_MAX;
m_nRefreshMin = 0;
m_nRefreshMax = UINT_MAX;
m_nMultisampleQualityMax = 0xFFFF;
ResetPossibleDepthStencilFormats();
ResetPossibleMultisampleTypeList();
ResetPossiblePresentIntervalList();
SetPossibleVertexProcessingList( true, true, true, false );
}
//--------------------------------------------------------------------------------------
CD3DEnumeration::~CD3DEnumeration()
{
ClearAdapterInfoList();
}
//--------------------------------------------------------------------------------------
// Enumerates available D3D adapters, devices, modes, etc.
//--------------------------------------------------------------------------------------
HRESULT CD3DEnumeration::Enumerate( IDirect3D9* pD3D,
LPDXUTCALLBACKISDEVICEACCEPTABLE IsDeviceAcceptableFunc )
{
if( pD3D == NULL )
{
pD3D = DXUTGetD3DObject();
if( pD3D == NULL )
return DXUTERR_NODIRECT3D;
}
m_pD3D = pD3D;
m_IsDeviceAcceptableFunc = IsDeviceAcceptableFunc;
HRESULT hr;
ClearAdapterInfoList();
CGrowableArray<D3DFORMAT> adapterFormatList;
const D3DFORMAT allowedAdapterFormatArray[] =
{
D3DFMT_X8R8G8B8,
D3DFMT_X1R5G5B5,
D3DFMT_R5G6B5,
D3DFMT_A2R10G10B10
};
const UINT allowedAdapterFormatArrayCount = sizeof(allowedAdapterFormatArray) / sizeof(allowedAdapterFormatArray[0]);
UINT numAdapters = pD3D->GetAdapterCount();
for (UINT adapterOrdinal = 0; adapterOrdinal < numAdapters; adapterOrdinal++)
{
CD3DEnumAdapterInfo* pAdapterInfo = new CD3DEnumAdapterInfo;
if( pAdapterInfo == NULL )
return E_OUTOFMEMORY;
pAdapterInfo->AdapterOrdinal = adapterOrdinal;
pD3D->GetAdapterIdentifier(adapterOrdinal, 0, &pAdapterInfo->AdapterIdentifier);
// Get list of all display modes on this adapter.
// Also build a temporary list of all display adapter formats.
adapterFormatList.RemoveAll();
for( UINT iFormatList = 0; iFormatList < allowedAdapterFormatArrayCount; iFormatList++ )
{
D3DFORMAT allowedAdapterFormat = allowedAdapterFormatArray[iFormatList];
UINT numAdapterModes = pD3D->GetAdapterModeCount( adapterOrdinal, allowedAdapterFormat );
for (UINT mode = 0; mode < numAdapterModes; mode++)
{
D3DDISPLAYMODE displayMode;
pD3D->EnumAdapterModes( adapterOrdinal, allowedAdapterFormat, mode, &displayMode );
if( displayMode.Width < m_nMinWidth ||
displayMode.Height < m_nMinHeight ||
displayMode.Width > m_nMaxWidth ||
displayMode.Height > m_nMaxHeight ||
displayMode.RefreshRate < m_nRefreshMin ||
displayMode.RefreshRate > m_nRefreshMax )
{
continue;
}
pAdapterInfo->displayModeList.Add( displayMode );
if( !adapterFormatList.Contains(displayMode.Format) )
adapterFormatList.Add( displayMode.Format );
}
}
D3DDISPLAYMODE displayMode;
pD3D->GetAdapterDisplayMode( adapterOrdinal, &displayMode );
if( !adapterFormatList.Contains(displayMode.Format) )
adapterFormatList.Add( displayMode.Format );
// Sort displaymode list
qsort( pAdapterInfo->displayModeList.GetData(),
pAdapterInfo->displayModeList.GetSize(), sizeof( D3DDISPLAYMODE ),
SortModesCallback );
// Get info for each device on this adapter
if( FAILED( EnumerateDevices( pAdapterInfo, &adapterFormatList ) ) )
{
delete pAdapterInfo;
continue;
}
// If at least one device on this adapter is available and compatible
// with the app, add the adapterInfo to the list
if( pAdapterInfo->deviceInfoList.GetSize() > 0 )
{
hr = m_AdapterInfoList.Add( pAdapterInfo );
if( FAILED(hr) )
return hr;
} else
delete pAdapterInfo;
}
bool bUniqueDesc = true;
CD3DEnumAdapterInfo* pAdapterInfo;
int i;
for( i=0; i<m_AdapterInfoList.GetSize(); i++ )
{
CD3DEnumAdapterInfo* pAdapterInfo1 = m_AdapterInfoList.GetAt(i);
for( int j=i+1; j<m_AdapterInfoList.GetSize(); j++ )
{
CD3DEnumAdapterInfo* pAdapterInfo2 = m_AdapterInfoList.GetAt(j);
if( _stricmp( pAdapterInfo1->AdapterIdentifier.Description,
pAdapterInfo2->AdapterIdentifier.Description ) == 0 )
{
bUniqueDesc = false;
break;
}
}
if( !bUniqueDesc )
break;
}
for( i=0; i<m_AdapterInfoList.GetSize(); i++ )
{
pAdapterInfo = m_AdapterInfoList.GetAt(i);
MultiByteToWideChar( CP_ACP, 0,
pAdapterInfo->AdapterIdentifier.Description, -1,
pAdapterInfo->szUniqueDescription, 100 );
pAdapterInfo->szUniqueDescription[100] = 0;
if( !bUniqueDesc )
{
WCHAR sz[100];
StringCchPrintf( sz, 100, L" (#%d)", pAdapterInfo->AdapterOrdinal );
StringCchCat( pAdapterInfo->szUniqueDescription, 256, sz );
}
}
return S_OK;
}
//--------------------------------------------------------------------------------------
// Enumerates D3D devices for a particular adapter.
//--------------------------------------------------------------------------------------
HRESULT CD3DEnumeration::EnumerateDevices( CD3DEnumAdapterInfo* pAdapterInfo, CGrowableArray<D3DFORMAT>* pAdapterFormatList )
{
HRESULT hr;
const D3DDEVTYPE devTypeArray[] =
{
D3DDEVTYPE_HAL,
D3DDEVTYPE_SW,
D3DDEVTYPE_REF
};
const UINT devTypeArrayCount = sizeof(devTypeArray) / sizeof(devTypeArray[0]);
// Enumerate each Direct3D device type
for( UINT iDeviceType = 0; iDeviceType < devTypeArrayCount; iDeviceType++ )
{
CD3DEnumDeviceInfo* pDeviceInfo = new CD3DEnumDeviceInfo;
if( pDeviceInfo == NULL )
return E_OUTOFMEMORY;
// Fill struct w/ AdapterOrdinal and D3DDEVTYPE
pDeviceInfo->DeviceType = devTypeArray[iDeviceType];
// Store device caps
if( FAILED( hr = m_pD3D->GetDeviceCaps( pAdapterInfo->AdapterOrdinal, pDeviceInfo->DeviceType,
&pDeviceInfo->Caps ) ) )
{
delete pDeviceInfo;
continue;
}
// Get info for each devicecombo on this device
if( FAILED( hr = EnumerateDeviceCombos( pAdapterInfo, pDeviceInfo, pAdapterFormatList ) ) )
{
delete pDeviceInfo;
continue;
}
// If at least one devicecombo for this device is found,
// add the deviceInfo to the list
if (pDeviceInfo->deviceSettingsComboList.GetSize() > 0 )
pAdapterInfo->deviceInfoList.Add( pDeviceInfo );
else
delete pDeviceInfo;
}
return S_OK;
}
//--------------------------------------------------------------------------------------
// Enumerates DeviceCombos for a particular device.
//--------------------------------------------------------------------------------------
HRESULT CD3DEnumeration::EnumerateDeviceCombos( CD3DEnumAdapterInfo* pAdapterInfo, CD3DEnumDeviceInfo* pDeviceInfo, CGrowableArray<D3DFORMAT>* pAdapterFormatList )
{
const D3DFORMAT backBufferFormatArray[] =
{
D3DFMT_A8R8G8B8,
D3DFMT_X8R8G8B8,
D3DFMT_A2R10G10B10,
D3DFMT_R5G6B5,
D3DFMT_A1R5G5B5,
D3DFMT_X1R5G5B5
};
const UINT backBufferFormatArrayCount = sizeof(backBufferFormatArray) / sizeof(backBufferFormatArray[0]);
// See which adapter formats are supported by this device
for( int iFormat=0; iFormat<pAdapterFormatList->GetSize(); iFormat++ )
{
D3DFORMAT adapterFormat = pAdapterFormatList->GetAt(iFormat);
for( UINT iBackBufferFormat = 0; iBackBufferFormat < backBufferFormatArrayCount; iBackBufferFormat++ )
{
D3DFORMAT backBufferFormat = backBufferFormatArray[iBackBufferFormat];
for( int nWindowed = 0; nWindowed < 2; nWindowed++)
{
if( !nWindowed && pAdapterInfo->displayModeList.GetSize() == 0 )
continue;
if (FAILED( m_pD3D->CheckDeviceType( pAdapterInfo->AdapterOrdinal, pDeviceInfo->DeviceType,
adapterFormat, backBufferFormat, nWindowed )))
{
continue;
}
if( m_bRequirePostPixelShaderBlending )
{
// If the backbuffer format doesn't support D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING
// then alpha test, pixel fog, render-target blending, color write enable, and dithering.
// are not supported.
if( FAILED( m_pD3D->CheckDeviceFormat( pAdapterInfo->AdapterOrdinal, pDeviceInfo->DeviceType,
adapterFormat, D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING,
D3DRTYPE_TEXTURE, backBufferFormat ) ) )
{
continue;
}
}
// If an application callback function has been provided, make sure this device
// is acceptable to the app.
if( m_IsDeviceAcceptableFunc != NULL )
{
if( !m_IsDeviceAcceptableFunc( &pDeviceInfo->Caps, adapterFormat, backBufferFormat, FALSE != nWindowed ) )
continue;
}
// At this point, we have an adapter/device/adapterformat/backbufferformat/iswindowed
// DeviceCombo that is supported by the system and acceptable to the app. We still
// need to find one or more suitable depth/stencil buffer format,
// multisample type, and present interval.
CD3DEnumDeviceSettingsCombo* pDeviceCombo = new CD3DEnumDeviceSettingsCombo;
if( pDeviceCombo == NULL )
return E_OUTOFMEMORY;
pDeviceCombo->AdapterOrdinal = pAdapterInfo->AdapterOrdinal;
pDeviceCombo->DeviceType = pDeviceInfo->DeviceType;
pDeviceCombo->AdapterFormat = adapterFormat;
pDeviceCombo->BackBufferFormat = backBufferFormat;
pDeviceCombo->Windowed = (nWindowed != 0);
BuildDepthStencilFormatList( pDeviceCombo );
BuildMultiSampleTypeList( pDeviceCombo );
if (pDeviceCombo->multiSampleTypeList.GetSize() == 0)
{
delete pDeviceCombo;
continue;
}
BuildDSMSConflictList( pDeviceCombo );
BuildPresentIntervalList(pDeviceInfo, pDeviceCombo );
pDeviceCombo->pAdapterInfo = pAdapterInfo;
pDeviceCombo->pDeviceInfo = pDeviceInfo;
pDeviceInfo->deviceSettingsComboList.Add( pDeviceCombo );
}
}
}
return S_OK;
}
//--------------------------------------------------------------------------------------
// Adds all depth/stencil formats that are compatible with the device
// and app to the given D3DDeviceCombo.
//--------------------------------------------------------------------------------------
void CD3DEnumeration::BuildDepthStencilFormatList( CD3DEnumDeviceSettingsCombo* pDeviceCombo )
{
D3DFORMAT depthStencilFmt;
for( int idsf = 0; idsf < m_DepthStecilPossibleList.GetSize(); idsf++ )
{
depthStencilFmt = m_DepthStecilPossibleList.GetAt(idsf);
if (SUCCEEDED(m_pD3D->CheckDeviceFormat(pDeviceCombo->AdapterOrdinal,
pDeviceCombo->DeviceType, pDeviceCombo->AdapterFormat,
D3DUSAGE_DEPTHSTENCIL, D3DRTYPE_SURFACE, depthStencilFmt)))
{
if (SUCCEEDED(m_pD3D->CheckDepthStencilMatch(pDeviceCombo->AdapterOrdinal,
pDeviceCombo->DeviceType, pDeviceCombo->AdapterFormat,
pDeviceCombo->BackBufferFormat, depthStencilFmt)))
{
pDeviceCombo->depthStencilFormatList.Add( depthStencilFmt );
}
}
}
}
//--------------------------------------------------------------------------------------
// Adds all multisample types that are compatible with the device and app to
// the given D3DDeviceCombo.
//--------------------------------------------------------------------------------------
void CD3DEnumeration::BuildMultiSampleTypeList( CD3DEnumDeviceSettingsCombo* pDeviceCombo )
{
D3DMULTISAMPLE_TYPE msType;
DWORD msQuality;
for( int imst = 0; imst < m_MultiSampleTypeList.GetSize(); imst++ )
{
msType = m_MultiSampleTypeList.GetAt(imst);
if( SUCCEEDED( m_pD3D->CheckDeviceMultiSampleType( pDeviceCombo->AdapterOrdinal,
pDeviceCombo->DeviceType, pDeviceCombo->BackBufferFormat,
pDeviceCombo->Windowed, msType, &msQuality ) ) )
{
pDeviceCombo->multiSampleTypeList.Add( msType );
if( msQuality > m_nMultisampleQualityMax+1 )
msQuality = m_nMultisampleQualityMax+1;
pDeviceCombo->multiSampleQualityList.Add( msQuality );
}
}
}
//--------------------------------------------------------------------------------------
// Find any conflicts between the available depth/stencil formats and
// multisample types.
//--------------------------------------------------------------------------------------
void CD3DEnumeration::BuildDSMSConflictList( CD3DEnumDeviceSettingsCombo* pDeviceCombo )
{
CD3DEnumDSMSConflict DSMSConflict;
for( int iDS=0; iDS<pDeviceCombo->depthStencilFormatList.GetSize(); iDS++ )
{
D3DFORMAT dsFmt = pDeviceCombo->depthStencilFormatList.GetAt(iDS);
for( int iMS=0; iMS<pDeviceCombo->multiSampleTypeList.GetSize(); iMS++ )
{
D3DMULTISAMPLE_TYPE msType = pDeviceCombo->multiSampleTypeList.GetAt(iMS);
if( FAILED( m_pD3D->CheckDeviceMultiSampleType( pDeviceCombo->AdapterOrdinal, pDeviceCombo->DeviceType,
dsFmt, pDeviceCombo->Windowed, msType, NULL ) ) )
{
DSMSConflict.DSFormat = dsFmt;
DSMSConflict.MSType = msType;
pDeviceCombo->DSMSConflictList.Add( DSMSConflict );
}
}
}
}
//--------------------------------------------------------------------------------------
// Adds all present intervals that are compatible with the device and app
// to the given D3DDeviceCombo.
//--------------------------------------------------------------------------------------
void CD3DEnumeration::BuildPresentIntervalList( CD3DEnumDeviceInfo* pDeviceInfo,
CD3DEnumDeviceSettingsCombo* pDeviceCombo )
{
UINT pi;
for( int ipi = 0; ipi < m_PresentIntervalList.GetSize(); ipi++ )
{
pi = m_PresentIntervalList.GetAt(ipi);
if( pDeviceCombo->Windowed )
{
if( pi == D3DPRESENT_INTERVAL_TWO ||
pi == D3DPRESENT_INTERVAL_THREE ||
pi == D3DPRESENT_INTERVAL_FOUR )
{
// These intervals are not supported in windowed mode.
continue;
}
}
// Note that D3DPRESENT_INTERVAL_DEFAULT is zero, so you
// can't do a caps check for it -- it is always available.
if( pi == D3DPRESENT_INTERVAL_DEFAULT ||
(pDeviceInfo->Caps.PresentationIntervals & pi) )
{
pDeviceCombo->presentIntervalList.Add( pi );
}
}
}
//--------------------------------------------------------------------------------------
// Release all the allocated CD3DEnumAdapterInfo objects and empty the list
//--------------------------------------------------------------------------------------
void CD3DEnumeration::ClearAdapterInfoList()
{
CD3DEnumAdapterInfo* pAdapterInfo;
for( int i=0; i<m_AdapterInfoList.GetSize(); i++ )
{
pAdapterInfo = m_AdapterInfoList.GetAt(i);
delete pAdapterInfo;
}
m_AdapterInfoList.RemoveAll();
}
//--------------------------------------------------------------------------------------
// Call GetAdapterInfoList() after Enumerate() to get a STL vector of
// CD3DEnumAdapterInfo*
//--------------------------------------------------------------------------------------
CGrowableArray<CD3DEnumAdapterInfo*>* CD3DEnumeration::GetAdapterInfoList()
{
return &m_AdapterInfoList;
}
//--------------------------------------------------------------------------------------
CD3DEnumAdapterInfo* CD3DEnumeration::GetAdapterInfo( UINT AdapterOrdinal )
{
for( int iAdapter=0; iAdapter<m_AdapterInfoList.GetSize(); iAdapter++ )
{
CD3DEnumAdapterInfo* pAdapterInfo = m_AdapterInfoList.GetAt(iAdapter);
if( pAdapterInfo->AdapterOrdinal == AdapterOrdinal )
return pAdapterInfo;
}
return NULL;
}
//--------------------------------------------------------------------------------------
CD3DEnumDeviceInfo* CD3DEnumeration::GetDeviceInfo( UINT AdapterOrdinal, D3DDEVTYPE DeviceType )
{
CD3DEnumAdapterInfo* pAdapterInfo = GetAdapterInfo( AdapterOrdinal );
if( pAdapterInfo )
{
for( int iDeviceInfo=0; iDeviceInfo<pAdapterInfo->deviceInfoList.GetSize(); iDeviceInfo++ )
{
CD3DEnumDeviceInfo* pDeviceInfo = pAdapterInfo->deviceInfoList.GetAt(iDeviceInfo);
if( pDeviceInfo->DeviceType == DeviceType )
return pDeviceInfo;
}
}
return NULL;
}
//--------------------------------------------------------------------------------------
//
//--------------------------------------------------------------------------------------
CD3DEnumDeviceSettingsCombo* CD3DEnumeration::GetDeviceSettingsCombo( UINT AdapterOrdinal, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed )
{
CD3DEnumDeviceInfo* pDeviceInfo = GetDeviceInfo( AdapterOrdinal, DeviceType );
if( pDeviceInfo )
{
for( int iDeviceCombo=0; iDeviceCombo<pDeviceInfo->deviceSettingsComboList.GetSize(); iDeviceCombo++ )
{
CD3DEnumDeviceSettingsCombo* pDeviceSettingsCombo = pDeviceInfo->deviceSettingsComboList.GetAt(iDeviceCombo);
if( pDeviceSettingsCombo->AdapterFormat == AdapterFormat &&
pDeviceSettingsCombo->BackBufferFormat == BackBufferFormat &&
pDeviceSettingsCombo->Windowed == bWindowed )
return pDeviceSettingsCombo;
}
}
return NULL;
}
//--------------------------------------------------------------------------------------
// Returns the number of color channel bits in the specified D3DFORMAT
//--------------------------------------------------------------------------------------
UINT DXUTColorChannelBits( D3DFORMAT fmt )
{
switch( fmt )
{
case D3DFMT_R8G8B8:
return 8;
case D3DFMT_A8R8G8B8:
return 8;
case D3DFMT_X8R8G8B8:
return 8;
case D3DFMT_R5G6B5:
return 5;
case D3DFMT_X1R5G5B5:
return 5;
case D3DFMT_A1R5G5B5:
return 5;
case D3DFMT_A4R4G4B4:
return 4;
case D3DFMT_R3G3B2:
return 2;
case D3DFMT_A8R3G3B2:
return 2;
case D3DFMT_X4R4G4B4:
return 4;
case D3DFMT_A2B10G10R10:
return 10;
case D3DFMT_A8B8G8R8:
return 8;
case D3DFMT_A2R10G10B10:
return 10;
case D3DFMT_A16B16G16R16:
return 16;
default:
return 0;
}
}
//--------------------------------------------------------------------------------------
// Returns the number of alpha channel bits in the specified D3DFORMAT
//--------------------------------------------------------------------------------------
UINT DXUTAlphaChannelBits( D3DFORMAT fmt )
{
switch( fmt )
{
case D3DFMT_R8G8B8:
return 0;
case D3DFMT_A8R8G8B8:
return 8;
case D3DFMT_X8R8G8B8:
return 0;
case D3DFMT_R5G6B5:
return 0;
case D3DFMT_X1R5G5B5:
return 0;
case D3DFMT_A1R5G5B5:
return 1;
case D3DFMT_A4R4G4B4:
return 4;
case D3DFMT_R3G3B2:
return 0;
case D3DFMT_A8R3G3B2:
return 8;
case D3DFMT_X4R4G4B4:
return 0;
case D3DFMT_A2B10G10R10:
return 2;
case D3DFMT_A8B8G8R8:
return 8;
case D3DFMT_A2R10G10B10:
return 2;
case D3DFMT_A16B16G16R16:
return 16;
default:
return 0;
}
}
//--------------------------------------------------------------------------------------
// Returns the number of depth bits in the specified D3DFORMAT
//--------------------------------------------------------------------------------------
UINT DXUTDepthBits( D3DFORMAT fmt )
{
switch( fmt )
{
case D3DFMT_D32F_LOCKABLE:
case D3DFMT_D32:
return 32;
case D3DFMT_D24X8:
case D3DFMT_D24S8:
case D3DFMT_D24X4S4:
case D3DFMT_D24FS8:
return 24;
case D3DFMT_D16_LOCKABLE:
case D3DFMT_D16:
return 16;
case D3DFMT_D15S1:
return 15;
default:
return 0;
}
}
//--------------------------------------------------------------------------------------
// Returns the number of stencil bits in the specified D3DFORMAT
//--------------------------------------------------------------------------------------
UINT DXUTStencilBits( D3DFORMAT fmt )
{
switch( fmt )
{
case D3DFMT_D16_LOCKABLE:
case D3DFMT_D16:
case D3DFMT_D32F_LOCKABLE:
case D3DFMT_D32:
case D3DFMT_D24X8:
return 0;
case D3DFMT_D15S1:
return 1;
case D3DFMT_D24X4S4:
return 4;
case D3DFMT_D24S8:
case D3DFMT_D24FS8:
return 8;
default:
return 0;
}
}
//--------------------------------------------------------------------------------------
// Used to sort D3DDISPLAYMODEs
//--------------------------------------------------------------------------------------
static int __cdecl SortModesCallback( const void* arg1, const void* arg2 )
{
D3DDISPLAYMODE* pdm1 = (D3DDISPLAYMODE*)arg1;
D3DDISPLAYMODE* pdm2 = (D3DDISPLAYMODE*)arg2;
if (pdm1->Width > pdm2->Width)
return 1;
if (pdm1->Width < pdm2->Width)
return -1;
if (pdm1->Height > pdm2->Height)
return 1;
if (pdm1->Height < pdm2->Height)
return -1;
if (pdm1->Format > pdm2->Format)
return 1;
if (pdm1->Format < pdm2->Format)
return -1;
if (pdm1->RefreshRate > pdm2->RefreshRate)
return 1;
if (pdm1->RefreshRate < pdm2->RefreshRate)
return -1;
return 0;
}
//--------------------------------------------------------------------------------------
CD3DEnumAdapterInfo::~CD3DEnumAdapterInfo( void )
{
CD3DEnumDeviceInfo* pDeviceInfo;
for( int i=0; i<deviceInfoList.GetSize(); i++ )
{
pDeviceInfo = deviceInfoList.GetAt(i);
delete pDeviceInfo;
}
deviceInfoList.RemoveAll();
}
//--------------------------------------------------------------------------------------
CD3DEnumDeviceInfo::~CD3DEnumDeviceInfo( void )
{
CD3DEnumDeviceSettingsCombo* pDeviceCombo;
for( int i=0; i<deviceSettingsComboList.GetSize(); i++ )
{
pDeviceCombo = deviceSettingsComboList.GetAt(i);
delete pDeviceCombo;
}
deviceSettingsComboList.RemoveAll();
}
//--------------------------------------------------------------------------------------
void CD3DEnumeration::ResetPossibleDepthStencilFormats()
{
m_DepthStecilPossibleList.RemoveAll();
m_DepthStecilPossibleList.Add( D3DFMT_D16 );
m_DepthStecilPossibleList.Add( D3DFMT_D15S1 );
m_DepthStecilPossibleList.Add( D3DFMT_D24X8 );
m_DepthStecilPossibleList.Add( D3DFMT_D24S8 );
m_DepthStecilPossibleList.Add( D3DFMT_D24X4S4 );
m_DepthStecilPossibleList.Add( D3DFMT_D32 );
}
//--------------------------------------------------------------------------------------
CGrowableArray<D3DFORMAT>* CD3DEnumeration::GetPossibleDepthStencilFormatList()
{
return &m_DepthStecilPossibleList;
}
//--------------------------------------------------------------------------------------
CGrowableArray<D3DMULTISAMPLE_TYPE>* CD3DEnumeration::GetPossibleMultisampleTypeList()
{
return &m_MultiSampleTypeList;
}
//--------------------------------------------------------------------------------------
void CD3DEnumeration::ResetPossibleMultisampleTypeList()
{
m_MultiSampleTypeList.RemoveAll();
m_MultiSampleTypeList.Add( D3DMULTISAMPLE_NONE );
m_MultiSampleTypeList.Add( D3DMULTISAMPLE_NONMASKABLE );
m_MultiSampleTypeList.Add( D3DMULTISAMPLE_2_SAMPLES );
m_MultiSampleTypeList.Add( D3DMULTISAMPLE_3_SAMPLES );
m_MultiSampleTypeList.Add( D3DMULTISAMPLE_4_SAMPLES );
m_MultiSampleTypeList.Add( D3DMULTISAMPLE_5_SAMPLES );
m_MultiSampleTypeList.Add( D3DMULTISAMPLE_6_SAMPLES );
m_MultiSampleTypeList.Add( D3DMULTISAMPLE_7_SAMPLES );
m_MultiSampleTypeList.Add( D3DMULTISAMPLE_8_SAMPLES );
m_MultiSampleTypeList.Add( D3DMULTISAMPLE_9_SAMPLES );
m_MultiSampleTypeList.Add( D3DMULTISAMPLE_10_SAMPLES );
m_MultiSampleTypeList.Add( D3DMULTISAMPLE_11_SAMPLES );
m_MultiSampleTypeList.Add( D3DMULTISAMPLE_12_SAMPLES );
m_MultiSampleTypeList.Add( D3DMULTISAMPLE_13_SAMPLES );
m_MultiSampleTypeList.Add( D3DMULTISAMPLE_14_SAMPLES );
m_MultiSampleTypeList.Add( D3DMULTISAMPLE_15_SAMPLES );
m_MultiSampleTypeList.Add( D3DMULTISAMPLE_16_SAMPLES );
}
//--------------------------------------------------------------------------------------
void CD3DEnumeration::GetPossibleVertexProcessingList( bool* pbSoftwareVP, bool* pbHardwareVP, bool* pbPureHarewareVP, bool* pbMixedVP )
{
*pbSoftwareVP = m_bSoftwareVP;
*pbHardwareVP = m_bHardwareVP;
*pbPureHarewareVP = m_bPureHarewareVP;
*pbMixedVP = m_bMixedVP;
}
//--------------------------------------------------------------------------------------
void CD3DEnumeration::SetPossibleVertexProcessingList( bool bSoftwareVP, bool bHardwareVP, bool bPureHarewareVP, bool bMixedVP )
{
m_bSoftwareVP = bSoftwareVP;
m_bHardwareVP = bHardwareVP;
m_bPureHarewareVP = bPureHarewareVP;
m_bMixedVP = bMixedVP;
}
//--------------------------------------------------------------------------------------
CGrowableArray<UINT>* CD3DEnumeration::GetPossiblePresentIntervalList()
{
return &m_PresentIntervalList;
}
//--------------------------------------------------------------------------------------
void CD3DEnumeration::ResetPossiblePresentIntervalList()
{
m_PresentIntervalList.RemoveAll();
m_PresentIntervalList.Add( D3DPRESENT_INTERVAL_IMMEDIATE );
m_PresentIntervalList.Add( D3DPRESENT_INTERVAL_DEFAULT );
m_PresentIntervalList.Add( D3DPRESENT_INTERVAL_ONE );
m_PresentIntervalList.Add( D3DPRESENT_INTERVAL_TWO );
m_PresentIntervalList.Add( D3DPRESENT_INTERVAL_THREE );
m_PresentIntervalList.Add( D3DPRESENT_INTERVAL_FOUR );
}
//--------------------------------------------------------------------------------------
void CD3DEnumeration::SetResolutionMinMax( UINT nMinWidth, UINT nMinHeight,
UINT nMaxWidth, UINT nMaxHeight )
{
m_nMinWidth = nMinWidth;
m_nMinHeight = nMinHeight;
m_nMaxWidth = nMaxWidth;
m_nMaxHeight = nMaxHeight;
}
//--------------------------------------------------------------------------------------
void CD3DEnumeration::SetRefreshMinMax( UINT nMin, UINT nMax )
{
m_nRefreshMin = nMin;
m_nRefreshMax = nMax;
}
//--------------------------------------------------------------------------------------
void CD3DEnumeration::SetMultisampleQualityMax( UINT nMax )
{
if( nMax > 0xFFFF )
nMax = 0xFFFF;
m_nMultisampleQualityMax = nMax;
}
@@ -0,0 +1,171 @@
//--------------------------------------------------------------------------------------
// File: DXUTEnum.h
//
// Enumerates D3D adapters, devices, modes, etc.
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//--------------------------------------------------------------------------------------
#pragma once
#ifndef DXUT_ENUM_H
#define DXUT_ENUM_H
//--------------------------------------------------------------------------------------
// Forward declarations
//--------------------------------------------------------------------------------------
class CD3DEnumAdapterInfo;
class CD3DEnumDeviceInfo;
struct CD3DEnumDeviceSettingsCombo;
struct CD3DEnumDSMSConflict;
//--------------------------------------------------------------------------------------
// Enumerates available Direct3D adapters, devices, modes, etc.
// Use DXUTGetEnumeration() to access global instance
//--------------------------------------------------------------------------------------
class CD3DEnumeration
{
public:
// These should be called before Enumerate().
//
// Use these calls and the IsDeviceAcceptable to control the contents of
// the enumeration object, which affects the device selection and the device settings dialog.
void SetRequirePostPixelShaderBlending( bool bRequire ) { m_bRequirePostPixelShaderBlending = bRequire; }
void SetResolutionMinMax( UINT nMinWidth, UINT nMinHeight, UINT nMaxWidth, UINT nMaxHeight );
void SetRefreshMinMax( UINT nMin, UINT nMax );
void SetMultisampleQualityMax( UINT nMax );
void GetPossibleVertexProcessingList( bool* pbSoftwareVP, bool* pbHardwareVP, bool* pbPureHarewareVP, bool* pbMixedVP );
void SetPossibleVertexProcessingList( bool bSoftwareVP, bool bHardwareVP, bool bPureHarewareVP, bool bMixedVP );
CGrowableArray<D3DFORMAT>* GetPossibleDepthStencilFormatList();
CGrowableArray<D3DMULTISAMPLE_TYPE>* GetPossibleMultisampleTypeList();
CGrowableArray<UINT>* GetPossiblePresentIntervalList();
void ResetPossibleDepthStencilFormats();
void ResetPossibleMultisampleTypeList();
void ResetPossiblePresentIntervalList();
// Call Enumerate() to enumerate available D3D adapters, devices, modes, etc.
HRESULT Enumerate( IDirect3D9* pD3D = NULL,
LPDXUTCALLBACKISDEVICEACCEPTABLE IsDeviceAcceptableFunc = NULL );
// These should be called after Enumerate() is called
CGrowableArray<CD3DEnumAdapterInfo*>* GetAdapterInfoList();
CD3DEnumAdapterInfo* GetAdapterInfo( UINT AdapterOrdinal );
CD3DEnumDeviceInfo* GetDeviceInfo( UINT AdapterOrdinal, D3DDEVTYPE DeviceType );
CD3DEnumDeviceSettingsCombo* GetDeviceSettingsCombo( DXUTDeviceSettings* pDeviceSettings ) { return GetDeviceSettingsCombo( pDeviceSettings->AdapterOrdinal, pDeviceSettings->DeviceType, pDeviceSettings->AdapterFormat, pDeviceSettings->pp.BackBufferFormat, pDeviceSettings->pp.Windowed ); }
CD3DEnumDeviceSettingsCombo* GetDeviceSettingsCombo( UINT AdapterOrdinal, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat, BOOL Windowed );
~CD3DEnumeration();
private:
friend CD3DEnumeration* DXUTGetEnumeration();
// Use DXUTGetEnumeration() to access global instance
CD3DEnumeration();
IDirect3D9* m_pD3D;
LPDXUTCALLBACKISDEVICEACCEPTABLE m_IsDeviceAcceptableFunc;
bool m_bRequirePostPixelShaderBlending;
CGrowableArray<D3DFORMAT> m_DepthStecilPossibleList;
CGrowableArray<D3DMULTISAMPLE_TYPE> m_MultiSampleTypeList;
CGrowableArray<UINT> m_PresentIntervalList;
bool m_bSoftwareVP;
bool m_bHardwareVP;
bool m_bPureHarewareVP;
bool m_bMixedVP;
UINT m_nMinWidth;
UINT m_nMaxWidth;
UINT m_nMinHeight;
UINT m_nMaxHeight;
UINT m_nRefreshMin;
UINT m_nRefreshMax;
UINT m_nMultisampleQualityMax;
// Array of CD3DEnumAdapterInfo* with unique AdapterOrdinals
CGrowableArray<CD3DEnumAdapterInfo*> m_AdapterInfoList;
HRESULT EnumerateDevices( CD3DEnumAdapterInfo* pAdapterInfo, CGrowableArray<D3DFORMAT>* pAdapterFormatList );
HRESULT EnumerateDeviceCombos( CD3DEnumAdapterInfo* pAdapterInfo, CD3DEnumDeviceInfo* pDeviceInfo, CGrowableArray<D3DFORMAT>* pAdapterFormatList );
void BuildDepthStencilFormatList( CD3DEnumDeviceSettingsCombo* pDeviceCombo );
void BuildMultiSampleTypeList( CD3DEnumDeviceSettingsCombo* pDeviceCombo );
void BuildDSMSConflictList( CD3DEnumDeviceSettingsCombo* pDeviceCombo );
void BuildPresentIntervalList( CD3DEnumDeviceInfo* pDeviceInfo, CD3DEnumDeviceSettingsCombo* pDeviceCombo );
void ClearAdapterInfoList();
};
CD3DEnumeration* DXUTGetEnumeration();
//--------------------------------------------------------------------------------------
// A class describing an adapter which contains a unique adapter ordinal
// that is installed on the system
//--------------------------------------------------------------------------------------
class CD3DEnumAdapterInfo
{
public:
~CD3DEnumAdapterInfo();
UINT AdapterOrdinal;
D3DADAPTER_IDENTIFIER9 AdapterIdentifier;
WCHAR szUniqueDescription[256];
CGrowableArray<D3DDISPLAYMODE> displayModeList; // Array of supported D3DDISPLAYMODEs
CGrowableArray<CD3DEnumDeviceInfo*> deviceInfoList; // Array of CD3DEnumDeviceInfo* with unique supported DeviceTypes
};
//--------------------------------------------------------------------------------------
// A class describing a Direct3D device that contains a
// unique supported device type
//--------------------------------------------------------------------------------------
class CD3DEnumDeviceInfo
{
public:
~CD3DEnumDeviceInfo();
UINT AdapterOrdinal;
D3DDEVTYPE DeviceType;
D3DCAPS9 Caps;
// List of CD3DEnumDeviceSettingsCombo* with a unique set
// of AdapterFormat, BackBufferFormat, and Windowed
CGrowableArray<CD3DEnumDeviceSettingsCombo*> deviceSettingsComboList;
};
//--------------------------------------------------------------------------------------
// A struct describing device settings that contains a unique combination of
// adapter format, back buffer format, and windowed that is compatible with a
// particular Direct3D device and the app.
//--------------------------------------------------------------------------------------
struct CD3DEnumDeviceSettingsCombo
{
UINT AdapterOrdinal;
D3DDEVTYPE DeviceType;
D3DFORMAT AdapterFormat;
D3DFORMAT BackBufferFormat;
BOOL Windowed;
CGrowableArray<D3DFORMAT> depthStencilFormatList; // List of D3DFORMATs
CGrowableArray<D3DMULTISAMPLE_TYPE> multiSampleTypeList; // List of D3DMULTISAMPLE_TYPEs
CGrowableArray<DWORD> multiSampleQualityList; // List of number of quality levels for each multisample type
CGrowableArray<UINT> presentIntervalList; // List of D3DPRESENT flags
CGrowableArray<CD3DEnumDSMSConflict> DSMSConflictList; // List of CD3DEnumDSMSConflict
CD3DEnumAdapterInfo* pAdapterInfo;
CD3DEnumDeviceInfo* pDeviceInfo;
};
//--------------------------------------------------------------------------------------
// A depth/stencil buffer format that is incompatible with a
// multisample type.
//--------------------------------------------------------------------------------------
struct CD3DEnumDSMSConflict
{
D3DFORMAT DSFormat;
D3DMULTISAMPLE_TYPE MSType;
};
#endif
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,889 @@
//--------------------------------------------------------------------------------------
// File: DXUTMisc.h
//
// Helper functions for Direct3D programming.
//
// Copyright (c) Microsoft Corporation. All rights reserved
//--------------------------------------------------------------------------------------
#pragma once
#ifndef DXUT_MISC_H
#define DXUT_MISC_H
//--------------------------------------------------------------------------------------
// A growable array
//--------------------------------------------------------------------------------------
template< typename TYPE >
class CGrowableArray
{
public:
CGrowableArray() { m_pData = NULL; m_nSize = 0; m_nMaxSize = 0; }
CGrowableArray( const CGrowableArray<TYPE>& a ) { for( int i=0; i < a.m_nSize; i++ ) Add( a.m_pData[i] ); }
~CGrowableArray() { RemoveAll(); }
const TYPE& operator[]( int nIndex ) const { return GetAt( nIndex ); }
TYPE& operator[]( int nIndex ) { return GetAt( nIndex ); }
CGrowableArray& operator=( const CGrowableArray<TYPE>& a ) { if( this == &a ) return *this; RemoveAll(); for( int i=0; i < a.m_nSize; i++ ) Add( a.m_pData[i] ); return *this; }
HRESULT SetSize( int nNewMaxSize );
HRESULT Add( const TYPE& value );
HRESULT Insert( int nIndex, const TYPE& value );
HRESULT SetAt( int nIndex, const TYPE& value );
TYPE& GetAt( int nIndex ) { assert( nIndex >= 0 && nIndex < m_nSize ); return m_pData[nIndex]; }
int GetSize() const { return m_nSize; }
TYPE* GetData() { return m_pData; }
bool Contains( const TYPE& value ){ return ( -1 != IndexOf( value ) ); }
int IndexOf( const TYPE& value ) { return ( m_nSize > 0 ) ? IndexOf( value, 0, m_nSize ) : -1; }
int IndexOf( const TYPE& value, int iStart ) { return IndexOf( value, iStart, m_nSize - iStart ); }
int IndexOf( const TYPE& value, int nIndex, int nNumElements );
int LastIndexOf( const TYPE& value ) { return ( m_nSize > 0 ) ? LastIndexOf( value, m_nSize-1, m_nSize ) : -1; }
int LastIndexOf( const TYPE& value, int nIndex ) { return LastIndexOf( value, nIndex, nIndex+1 ); }
int LastIndexOf( const TYPE& value, int nIndex, int nNumElements );
HRESULT Remove( int nIndex );
void RemoveAll() { SetSize(0); }
protected:
TYPE* m_pData; // the actual array of data
int m_nSize; // # of elements (upperBound - 1)
int m_nMaxSize; // max allocated
HRESULT SetSizeInternal( int nNewMaxSize ); // This version doesn't call ctor or dtor.
};
//--------------------------------------------------------------------------------------
// Performs timer operations
// Use DXUTGetGlobalTimer() to get the global instance
//--------------------------------------------------------------------------------------
class CDXUTTimer
{
public:
CDXUTTimer();
void Reset(); // resets the timer
void Start(); // starts the timer
void Stop(); // stop (or pause) the timer
void Advance(); // advance the timer by 0.1 seconds
double GetAbsoluteTime(); // get the absolute system time
double GetTime(); // get the current time
double GetElapsedTime(); // get the time that elapsed between GetElapsedTime() calls
bool IsStopped(); // returns true if timer stopped
protected:
bool m_bUsingQPF;
bool m_bTimerStopped;
LONGLONG m_llQPFTicksPerSec;
LONGLONG m_llStopTime;
LONGLONG m_llLastElapsedTime;
LONGLONG m_llBaseTime;
};
CDXUTTimer* DXUTGetGlobalTimer();
//-----------------------------------------------------------------------------
// Resource cache for textures, fonts, meshs, and effects.
// Use DXUTGetGlobalResourceCache() to access the global cache
//-----------------------------------------------------------------------------
enum DXUTCACHE_SOURCELOCATION { DXUTCACHE_LOCATION_FILE, DXUTCACHE_LOCATION_RESOURCE };
struct DXUTCache_Texture
{
DXUTCACHE_SOURCELOCATION Location;
WCHAR wszSource[MAX_PATH];
HMODULE hSrcModule;
UINT Width;
UINT Height;
UINT Depth;
UINT MipLevels;
DWORD Usage;
D3DFORMAT Format;
D3DPOOL Pool;
D3DRESOURCETYPE Type;
IDirect3DBaseTexture9 *pTexture;
};
struct DXUTCache_Font : public D3DXFONT_DESC
{
ID3DXFont *pFont;
};
struct DXUTCache_Effect
{
DXUTCACHE_SOURCELOCATION Location;
WCHAR wszSource[MAX_PATH];
HMODULE hSrcModule;
DWORD dwFlags;
ID3DXEffect *pEffect;
};
class CDXUTResourceCache
{
public:
~CDXUTResourceCache();
HRESULT CreateTextureFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, LPDIRECT3DTEXTURE9 *ppTexture );
HRESULT CreateTextureFromFileEx( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, UINT Width, UINT Height, UINT MipLevels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, DWORD MipFilter, D3DCOLOR ColorKey, D3DXIMAGE_INFO *pSrcInfo, PALETTEENTRY *pPalette, LPDIRECT3DTEXTURE9 *ppTexture );
HRESULT CreateTextureFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, LPCTSTR pSrcResource, LPDIRECT3DTEXTURE9 *ppTexture );
HRESULT CreateTextureFromResourceEx( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, LPCTSTR pSrcResource, UINT Width, UINT Height, UINT MipLevels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, DWORD MipFilter, D3DCOLOR ColorKey, D3DXIMAGE_INFO *pSrcInfo, PALETTEENTRY *pPalette, LPDIRECT3DTEXTURE9 *ppTexture );
HRESULT CreateCubeTextureFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, LPDIRECT3DCUBETEXTURE9 *ppCubeTexture );
HRESULT CreateCubeTextureFromFileEx( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, UINT Size, UINT MipLevels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, DWORD MipFilter, D3DCOLOR ColorKey, D3DXIMAGE_INFO *pSrcInfo, PALETTEENTRY *pPalette, LPDIRECT3DCUBETEXTURE9 *ppCubeTexture );
HRESULT CreateCubeTextureFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, LPCTSTR pSrcResource, LPDIRECT3DCUBETEXTURE9 *ppCubeTexture );
HRESULT CreateCubeTextureFromResourceEx( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, LPCTSTR pSrcResource, UINT Size, UINT MipLevels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, DWORD MipFilter, D3DCOLOR ColorKey, D3DXIMAGE_INFO *pSrcInfo, PALETTEENTRY *pPalette, LPDIRECT3DCUBETEXTURE9 *ppCubeTexture );
HRESULT CreateVolumeTextureFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, LPDIRECT3DVOLUMETEXTURE9 *ppVolumeTexture );
HRESULT CreateVolumeTextureFromFileEx( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, UINT Width, UINT Height, UINT Depth, UINT MipLevels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, DWORD MipFilter, D3DCOLOR ColorKey, D3DXIMAGE_INFO *pSrcInfo, PALETTEENTRY *pPalette, LPDIRECT3DVOLUMETEXTURE9 *ppTexture );
HRESULT CreateVolumeTextureFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, LPCTSTR pSrcResource, LPDIRECT3DVOLUMETEXTURE9 *ppVolumeTexture );
HRESULT CreateVolumeTextureFromResourceEx( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, LPCTSTR pSrcResource, UINT Width, UINT Height, UINT Depth, UINT MipLevels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, DWORD Filter, DWORD MipFilter, D3DCOLOR ColorKey, D3DXIMAGE_INFO *pSrcInfo, PALETTEENTRY *pPalette, LPDIRECT3DVOLUMETEXTURE9 *ppVolumeTexture );
HRESULT CreateFont( LPDIRECT3DDEVICE9 pDevice, UINT Height, UINT Width, UINT Weight, UINT MipLevels, BOOL Italic, DWORD CharSet, DWORD OutputPrecision, DWORD Quality, DWORD PitchAndFamily, LPCTSTR pFacename, LPD3DXFONT *ppFont );
HRESULT CreateFontIndirect( LPDIRECT3DDEVICE9 pDevice, CONST D3DXFONT_DESC *pDesc, LPD3DXFONT *ppFont );
HRESULT CreateEffectFromFile( LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, const D3DXMACRO *pDefines, LPD3DXINCLUDE pInclude, DWORD Flags, LPD3DXEFFECTPOOL pPool, LPD3DXEFFECT *ppEffect, LPD3DXBUFFER *ppCompilationErrors );
HRESULT CreateEffectFromResource( LPDIRECT3DDEVICE9 pDevice, HMODULE hSrcModule, LPCTSTR pSrcResource, const D3DXMACRO *pDefines, LPD3DXINCLUDE pInclude, DWORD Flags, LPD3DXEFFECTPOOL pPool, LPD3DXEFFECT *ppEffect, LPD3DXBUFFER *ppCompilationErrors );
public:
HRESULT OnCreateDevice( IDirect3DDevice9 *pd3dDevice );
HRESULT OnResetDevice( IDirect3DDevice9 *pd3dDevice );
HRESULT OnLostDevice();
HRESULT OnDestroyDevice();
protected:
friend CDXUTResourceCache& DXUTGetGlobalResourceCache();
friend HRESULT DXUTInitialize3DEnvironment();
friend HRESULT DXUTReset3DEnvironment();
friend void DXUTCleanup3DEnvironment( bool bReleaseSettings );
CDXUTResourceCache() { }
CGrowableArray< DXUTCache_Texture > m_TextureCache;
CGrowableArray< DXUTCache_Effect > m_EffectCache;
CGrowableArray< DXUTCache_Font > m_FontCache;
};
CDXUTResourceCache& DXUTGetGlobalResourceCache();
//--------------------------------------------------------------------------------------
class CD3DArcBall
{
public:
CD3DArcBall();
// Functions to change behavior
void Reset();
void SetTranslationRadius( FLOAT fRadiusTranslation ) { m_fRadiusTranslation = fRadiusTranslation; }
void SetWindow( INT nWidth, INT nHeight, FLOAT fRadius = 0.9f ) { m_nWidth = nWidth; m_nHeight = nHeight; m_fRadius = fRadius; m_vCenter = D3DXVECTOR2(m_nWidth/2.0f,m_nHeight/2.0f); }
void SetOffset( INT nX, INT nY ) { m_Offset.x = nX; m_Offset.y = nY; }
// Call these from client and use GetRotationMatrix() to read new rotation matrix
void OnBegin( int nX, int nY ); // start the rotation (pass current mouse position)
void OnMove( int nX, int nY ); // continue the rotation (pass current mouse position)
void OnEnd(); // end the rotation
// Or call this to automatically handle left, middle, right buttons
LRESULT HandleMessages( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
// Functions to get/set state
D3DXMATRIX* GetRotationMatrix() { return D3DXMatrixRotationQuaternion(&m_mRotation, &m_qNow); };
D3DXMATRIX* GetTranslationMatrix() { return &m_mTranslation; }
D3DXMATRIX* GetTranslationDeltaMatrix() { return &m_mTranslationDelta; }
bool IsBeingDragged() { return m_bDrag; }
D3DXQUATERNION GetQuatNow() { return m_qNow; }
void SetQuatNow( D3DXQUATERNION q ) { m_qNow = q; }
static D3DXQUATERNION QuatFromBallPoints( const D3DXVECTOR3 &vFrom, const D3DXVECTOR3 &vTo );
protected:
D3DXMATRIXA16 m_mRotation; // Matrix for arc ball's orientation
D3DXMATRIXA16 m_mTranslation; // Matrix for arc ball's position
D3DXMATRIXA16 m_mTranslationDelta; // Matrix for arc ball's position
POINT m_Offset; // window offset, or upper-left corner of window
INT m_nWidth; // arc ball's window width
INT m_nHeight; // arc ball's window height
D3DXVECTOR2 m_vCenter; // center of arc ball
FLOAT m_fRadius; // arc ball's radius in screen coords
FLOAT m_fRadiusTranslation; // arc ball's radius for translating the target
D3DXQUATERNION m_qDown; // Quaternion before button down
D3DXQUATERNION m_qNow; // Composite quaternion for current drag
bool m_bDrag; // Whether user is dragging arc ball
POINT m_ptLastMouse; // position of last mouse point
D3DXVECTOR3 m_vDownPt; // starting point of rotation arc
D3DXVECTOR3 m_vCurrentPt; // current point of rotation arc
D3DXVECTOR3 ScreenToVector( float fScreenPtX, float fScreenPtY );
};
//--------------------------------------------------------------------------------------
// used by CCamera to map WM_KEYDOWN keys
//--------------------------------------------------------------------------------------
enum D3DUtil_CameraKeys
{
CAM_STRAFE_LEFT = 0,
CAM_STRAFE_RIGHT,
CAM_MOVE_FORWARD,
CAM_MOVE_BACKWARD,
CAM_MOVE_UP,
CAM_MOVE_DOWN,
CAM_RESET,
CAM_CONTROLDOWN,
CAM_MAX_KEYS,
CAM_UNKNOWN = 0xFF
};
#define KEY_WAS_DOWN_MASK 0x80
#define KEY_IS_DOWN_MASK 0x01
#define MOUSE_LEFT_BUTTON 0x01
#define MOUSE_MIDDLE_BUTTON 0x02
#define MOUSE_RIGHT_BUTTON 0x04
#define MOUSE_WHEEL 0x08
//--------------------------------------------------------------------------------------
// Simple base camera class that moves and rotates. The base class
// records mouse and keyboard input for use by a derived class, and
// keeps common state.
//--------------------------------------------------------------------------------------
class CBaseCamera
{
public:
CBaseCamera();
// Call these from client and use Get*Matrix() to read new matrices
virtual LRESULT HandleMessages( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
virtual void FrameMove( FLOAT fElapsedTime ) = 0;
// Functions to change camera matrices
virtual void Reset();
virtual void SetViewParams( D3DXVECTOR3* pvEyePt, D3DXVECTOR3* pvLookatPt );
virtual void SetProjParams( FLOAT fFOV, FLOAT fAspect, FLOAT fNearPlane, FLOAT fFarPlane );
// Functions to change behavior
virtual void SetDragRect( RECT &rc ) { m_rcDrag = rc; }
void SetInvertPitch( bool bInvertPitch ) { m_bInvertPitch = bInvertPitch; }
void SetDrag( bool bMovementDrag, FLOAT fTotalDragTimeToZero = 0.25f ) { m_bMovementDrag = bMovementDrag; m_fTotalDragTimeToZero = fTotalDragTimeToZero; }
void SetEnableYAxisMovement( bool bEnableYAxisMovement ) { m_bEnableYAxisMovement = bEnableYAxisMovement; }
void SetEnablePositionMovement( bool bEnablePositionMovement ) { m_bEnablePositionMovement = bEnablePositionMovement; }
void SetClipToBoundary( bool bClipToBoundary, D3DXVECTOR3* pvMinBoundary, D3DXVECTOR3* pvMaxBoundary ) { m_bClipToBoundary = bClipToBoundary; if( pvMinBoundary ) m_vMinBoundary = *pvMinBoundary; if( pvMaxBoundary ) m_vMaxBoundary = *pvMaxBoundary; }
void SetScalers( FLOAT fRotationScaler = 0.01f, FLOAT fMoveScaler = 5.0f ) { m_fRotationScaler = fRotationScaler; m_fMoveScaler = fMoveScaler; }
void SetNumberOfFramesToSmoothMouseData( int nFrames ) { if( nFrames > 0 ) m_fFramesToSmoothMouseData = (float)nFrames; }
void SetResetCursorAfterMove( bool bResetCursorAfterMove ) { m_bResetCursorAfterMove = bResetCursorAfterMove; }
// Functions to get state
const D3DXMATRIX* GetViewMatrix() const { return &m_mView; }
const D3DXMATRIX* GetProjMatrix() const { return &m_mProj; }
const D3DXVECTOR3* GetEyePt() const { return &m_vEye; }
const D3DXVECTOR3* GetLookAtPt() const { return &m_vLookAt; }
bool IsBeingDragged() { return (m_bMouseLButtonDown || m_bMouseMButtonDown || m_bMouseRButtonDown); }
bool IsMouseLButtonDown() { return m_bMouseLButtonDown; }
bool IsMouseMButtonDown() { return m_bMouseMButtonDown; }
bool IsMouseRButtonDown() { return m_bMouseRButtonDown; }
protected:
// Functions to map a WM_KEYDOWN key to a D3DUtil_CameraKeys enum
virtual D3DUtil_CameraKeys MapKey( UINT nKey );
bool IsKeyDown( BYTE key ) { return( (key & KEY_IS_DOWN_MASK) == KEY_IS_DOWN_MASK ); }
bool WasKeyDown( BYTE key ) { return( (key & KEY_WAS_DOWN_MASK) == KEY_WAS_DOWN_MASK ); }
void ConstrainToBoundary( D3DXVECTOR3* pV );
void UpdateMouseDelta( float fElapsedTime );
void UpdateVelocity( float fElapsedTime );
D3DXMATRIX m_mView; // View matrix
D3DXMATRIX m_mProj; // Projection matrix
BYTE m_aKeys[CAM_MAX_KEYS]; // State of input - KEY_WAS_DOWN_MASK|KEY_IS_DOWN_MASK
POINT m_ptLastMousePosition; // Last absolute position of mouse cursor
bool m_bMouseLButtonDown; // True if left button is down
bool m_bMouseMButtonDown; // True if middle button is down
bool m_bMouseRButtonDown; // True if right button is down
int m_nCurrentButtonMask; // mask of which buttons are down
int m_nMouseWheelDelta; // Amount of middle wheel scroll (+/-)
D3DXVECTOR2 m_vMouseDelta; // Mouse relative delta smoothed over a few frames
float m_fFramesToSmoothMouseData; // Number of frames to smooth mouse data over
D3DXVECTOR3 m_vDefaultEye; // Default camera eye position
D3DXVECTOR3 m_vDefaultLookAt; // Default LookAt position
D3DXVECTOR3 m_vEye; // Camera eye position
D3DXVECTOR3 m_vLookAt; // LookAt position
float m_fCameraYawAngle; // Yaw angle of camera
float m_fCameraPitchAngle; // Pitch angle of camera
RECT m_rcDrag; // Rectangle within which a drag can be initiated.
D3DXVECTOR3 m_vVelocity; // Velocity of camera
bool m_bMovementDrag; // If true, then camera movement will slow to a stop otherwise movement is instant
D3DXVECTOR3 m_vVelocityDrag; // Velocity drag force
FLOAT m_fDragTimer; // Countdown timer to apply drag
FLOAT m_fTotalDragTimeToZero; // Time it takes for velocity to go from full to 0
D3DXVECTOR2 m_vRotVelocity; // Velocity of camera
float m_fFOV; // Field of view
float m_fAspect; // Aspect ratio
float m_fNearPlane; // Near plane
float m_fFarPlane; // Far plane
float m_fRotationScaler; // Scaler for rotation
float m_fMoveScaler; // Scaler for movement
bool m_bInvertPitch; // Invert the pitch axis
bool m_bEnablePositionMovement; // If true, then the user can translate the camera/model
bool m_bEnableYAxisMovement; // If true, then camera can move in the y-axis
bool m_bClipToBoundary; // If true, then the camera will be clipped to the boundary
D3DXVECTOR3 m_vMinBoundary; // Min point in clip boundary
D3DXVECTOR3 m_vMaxBoundary; // Max point in clip boundary
bool m_bResetCursorAfterMove;// If true, the class will reset the cursor position so that the cursor always has space to move
};
//--------------------------------------------------------------------------------------
// Simple first person camera class that moves and rotates.
// It allows yaw and pitch but not roll. It uses WM_KEYDOWN and
// GetCursorPos() to respond to keyboard and mouse input and updates the
// view matrix based on input.
//--------------------------------------------------------------------------------------
class CFirstPersonCamera : public CBaseCamera
{
public:
CFirstPersonCamera();
// Call these from client and use Get*Matrix() to read new matrices
virtual void FrameMove( FLOAT fElapsedTime );
// Functions to change behavior
void SetRotateButtons( bool bLeft, bool bMiddle, bool bRight );
// Functions to get state
D3DXMATRIX* GetWorldMatrix() { return &m_mCameraWorld; }
const D3DXVECTOR3* GetWorldRight() const { return (D3DXVECTOR3*)&m_mCameraWorld._11; }
const D3DXVECTOR3* GetWorldUp() const { return (D3DXVECTOR3*)&m_mCameraWorld._21; }
const D3DXVECTOR3* GetWorldAhead() const { return (D3DXVECTOR3*)&m_mCameraWorld._31; }
const D3DXVECTOR3* GetEyePt() const { return (D3DXVECTOR3*)&m_mCameraWorld._41; }
protected:
D3DXMATRIX m_mCameraWorld; // World matrix of the camera (inverse of the view matrix)
int m_nActiveButtonMask; // Mask to determine which button to enable for rotation
};
//--------------------------------------------------------------------------------------
// Simple model viewing camera class that rotates around the object.
//--------------------------------------------------------------------------------------
class CModelViewerCamera : public CBaseCamera
{
public:
CModelViewerCamera();
// Call these from client and use Get*Matrix() to read new matrices
virtual LRESULT HandleMessages( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
virtual void FrameMove( FLOAT fElapsedTime );
// Functions to change behavior
virtual void SetDragRect( RECT &rc );
void Reset();
void SetViewParams( D3DXVECTOR3* pvEyePt, D3DXVECTOR3* pvLookatPt );
void SetButtonMasks( int nRotateModelButtonMask = MOUSE_LEFT_BUTTON, int nZoomButtonMask = MOUSE_WHEEL, int nRotateCameraButtonMask = MOUSE_RIGHT_BUTTON ) { m_nRotateModelButtonMask = nRotateModelButtonMask, m_nZoomButtonMask = nZoomButtonMask; m_nRotateCameraButtonMask = nRotateCameraButtonMask; }
void SetAttachCameraToModel( bool bEnable = false ) { m_bAttachCameraToModel = bEnable; }
void SetWindow( int nWidth, int nHeight, float fArcballRadius=0.9f ) { m_WorldArcBall.SetWindow( nWidth, nHeight, fArcballRadius ); m_ViewArcBall.SetWindow( nWidth, nHeight, fArcballRadius ); }
void SetRadius( float fDefaultRadius=5.0f, float fMinRadius=1.0f, float fMaxRadius=FLT_MAX ) { m_fDefaultRadius = m_fRadius = fDefaultRadius; m_fMinRadius = fMinRadius; m_fMaxRadius = fMaxRadius; }
void SetModelCenter( D3DXVECTOR3 vModelCenter ) { m_vModelCenter = vModelCenter; }
void SetLimitPitch( bool bLimitPitch ) { m_bLimitPitch = bLimitPitch; }
void SetViewQuat( D3DXQUATERNION q ) { m_ViewArcBall.SetQuatNow( q ); m_bDragSinceLastUpdate = true; }
void SetWorldQuat( D3DXQUATERNION q ) { m_WorldArcBall.SetQuatNow( q ); m_bDragSinceLastUpdate = true; }
// Functions to get state
D3DXMATRIX* GetWorldMatrix() { return &m_mWorld; }
protected:
CD3DArcBall m_WorldArcBall;
CD3DArcBall m_ViewArcBall;
D3DXVECTOR3 m_vModelCenter;
D3DXMATRIX m_mModelLastRot; // Last arcball rotation matrix for model
D3DXMATRIX m_mModelRot; // Rotation matrix of model
D3DXMATRIX m_mWorld; // World matrix of model
int m_nRotateModelButtonMask;
int m_nZoomButtonMask;
int m_nRotateCameraButtonMask;
bool m_bAttachCameraToModel;
bool m_bLimitPitch;
float m_fRadius; // Distance from the camera to model
float m_fDefaultRadius; // Distance from the camera to model
float m_fMinRadius; // Min radius
float m_fMaxRadius; // Max radius
bool m_bDragSinceLastUpdate; // True if mouse drag has happened since last time FrameMove is called.
D3DXMATRIX m_mCameraRotLast;
};
//--------------------------------------------------------------------------------------
// Manages the intertion point when drawing text
//--------------------------------------------------------------------------------------
class CDXUTTextHelper
{
public:
CDXUTTextHelper( ID3DXFont* pFont, ID3DXSprite* pSprite, int nLineHeight );
void SetInsertionPos( int x, int y ) { m_pt.x = x; m_pt.y = y; }
void SetForegroundColor( D3DXCOLOR clr ) { m_clr = clr; }
void Begin();
HRESULT DrawFormattedTextLine( const WCHAR* strMsg, ... );
HRESULT DrawTextLine( const WCHAR* strMsg );
HRESULT DrawFormattedTextLine( RECT &rc, DWORD dwFlags, const WCHAR* strMsg, ... );
HRESULT DrawTextLine( RECT &rc, DWORD dwFlags, const WCHAR* strMsg );
void End();
protected:
ID3DXFont* m_pFont;
ID3DXSprite* m_pSprite;
D3DXCOLOR m_clr;
POINT m_pt;
int m_nLineHeight;
};
//--------------------------------------------------------------------------------------
// Manages a persistent list of lines and draws them using ID3DXLine
//--------------------------------------------------------------------------------------
class CDXUTLineManager
{
public:
CDXUTLineManager();
~CDXUTLineManager();
HRESULT OnCreatedDevice( IDirect3DDevice9* pd3dDevice );
HRESULT OnResetDevice();
HRESULT OnRender();
HRESULT OnLostDevice();
HRESULT OnDeletedDevice();
HRESULT AddLine( int* pnLineID, D3DXVECTOR2* pVertexList, DWORD dwVertexListCount, D3DCOLOR Color, float fWidth, float fScaleRatio, bool bAntiAlias );
HRESULT AddRect( int* pnLineID, RECT rc, D3DCOLOR Color, float fWidth, float fScaleRatio, bool bAntiAlias );
HRESULT RemoveLine( int nLineID );
HRESULT RemoveAllLines();
protected:
struct LINE_NODE
{
int nLineID;
D3DCOLOR Color;
float fWidth;
bool bAntiAlias;
float fScaleRatio;
D3DXVECTOR2* pVertexList;
DWORD dwVertexListCount;
};
CGrowableArray<LINE_NODE*> m_LinesList;
IDirect3DDevice9* m_pd3dDevice;
ID3DXLine* m_pD3DXLine;
};
//--------------------------------------------------------------------------------------
// Manages the mesh, direction, mouse events of a directional arrow that
// rotates around a radius controlled by an arcball
//--------------------------------------------------------------------------------------
class CDXUTDirectionWidget
{
public:
CDXUTDirectionWidget();
static HRESULT StaticOnCreateDevice( IDirect3DDevice9* pd3dDevice );
HRESULT OnResetDevice( const D3DSURFACE_DESC* pBackBufferSurfaceDesc );
HRESULT OnRender( D3DXCOLOR color, const D3DXMATRIX* pmView, const D3DXMATRIX* pmProj, const D3DXVECTOR3* pEyePt );
LRESULT HandleMessages( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
static void StaticOnLostDevice();
static void StaticOnDestroyDevice();
D3DXVECTOR3 GetLightDirection() { return m_vCurrentDir; };
void SetLightDirection( D3DXVECTOR3 vDir ) { m_vDefaultDir = m_vCurrentDir = vDir; };
void SetButtonMask( int nRotate = MOUSE_RIGHT_BUTTON ) { m_nRotateMask = nRotate; }
float GetRadius() { return m_fRadius; };
void SetRadius( float fRadius ) { m_fRadius = fRadius; };
bool IsBeingDragged() { return m_ArcBall.IsBeingDragged(); };
protected:
HRESULT UpdateLightDir();
static IDirect3DDevice9* s_pd3dDevice;
static ID3DXEffect* s_pEffect;
static ID3DXMesh* s_pMesh;
float m_fRadius;
int m_nRotateMask;
CD3DArcBall m_ArcBall;
D3DXVECTOR3 m_vDefaultDir;
D3DXVECTOR3 m_vCurrentDir;
D3DXMATRIX m_mView;
D3DXMATRIXA16 m_mRot;
D3DXMATRIXA16 m_mRotSnapshot;
};
//--------------------------------------------------------------------------------------
// Tries to finds a media file by searching in common locations
//--------------------------------------------------------------------------------------
HRESULT DXUTFindDXSDKMediaFileCch( WCHAR* strDestPath, int cchDest, LPCWSTR strFilename );
HRESULT DXUTSetMediaSearchPath( LPCWSTR strPath );
LPCWSTR DXUTGetMediaSearchPath();
//--------------------------------------------------------------------------------------
// Returns the string for the given D3DFORMAT.
// bWithPrefix determines whether the string should include the "D3DFMT_"
//--------------------------------------------------------------------------------------
LPCWSTR DXUTD3DFormatToString( D3DFORMAT format, bool bWithPrefix );
//--------------------------------------------------------------------------------------
// Builds and sets a cursor for the D3D device based on hCursor.
//--------------------------------------------------------------------------------------
HRESULT DXUTSetDeviceCursor( IDirect3DDevice9* pd3dDevice, HCURSOR hCursor, bool bAddWatermark );
//--------------------------------------------------------------------------------------
// Returns a view matrix for rendering to a face of a cubemap.
//--------------------------------------------------------------------------------------
D3DXMATRIX DXUTGetCubeMapViewMatrix( DWORD dwFace );
//--------------------------------------------------------------------------------------
// Debug printing support
// See dxerr9.h for more debug printing support
//--------------------------------------------------------------------------------------
void DXUTOutputDebugStringW( LPCWSTR strMsg, ... );
void DXUTOutputDebugStringA( LPCSTR strMsg, ... );
HRESULT WINAPI DXUTTrace( const CHAR* strFile, DWORD dwLine, HRESULT hr, const WCHAR* strMsg, bool bPopMsgBox );
#ifdef UNICODE
#define DXUTOutputDebugString DXUTOutputDebugStringW
#else
#define DXUTOutputDebugString DXUTOutputDebugStringA
#endif
// These macros are very similar to dxerr9's but it special cases the HRESULT defined
// by the sample framework pop better message boxes.
#if defined(DEBUG) | defined(_DEBUG)
#define DXUT_ERR(str,hr) DXUTTrace( __FILE__, (DWORD)__LINE__, hr, str, false )
#define DXUT_ERR_MSGBOX(str,hr) DXUTTrace( __FILE__, (DWORD)__LINE__, hr, str, true )
#define DXUTTRACE DXUTOutputDebugString
#else
#define DXUT_ERR(str,hr) (hr)
#define DXUT_ERR_MSGBOX(str,hr) (hr)
#define DXUTTRACE (__noop)
#endif
//--------------------------------------------------------------------------------------
// Direct3D9 dynamic linking support -- calls top-level D3D9 APIs with graceful
// failure if APIs are not present.
//--------------------------------------------------------------------------------------
IDirect3D9 * WINAPI DXUT_Dynamic_Direct3DCreate9(UINT SDKVersion);
int WINAPI DXUT_Dynamic_D3DPERF_BeginEvent( D3DCOLOR col, LPCWSTR wszName );
int WINAPI DXUT_Dynamic_D3DPERF_EndEvent( void );
void WINAPI DXUT_Dynamic_D3DPERF_SetMarker( D3DCOLOR col, LPCWSTR wszName );
void WINAPI DXUT_Dynamic_D3DPERF_SetRegion( D3DCOLOR col, LPCWSTR wszName );
BOOL WINAPI DXUT_Dynamic_D3DPERF_QueryRepeatFrame( void );
void WINAPI DXUT_Dynamic_D3DPERF_SetOptions( DWORD dwOptions );
DWORD WINAPI DXUT_Dynamic_D3DPERF_GetStatus( void );
//--------------------------------------------------------------------------------------
// Profiling/instrumentation support
//--------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------
// Some D3DPERF APIs take a color that can be used when displaying user events in
// performance analysis tools. The following constants are provided for your
// convenience, but you can use any colors you like.
//--------------------------------------------------------------------------------------
const D3DCOLOR DXUT_PERFEVENTCOLOR = D3DCOLOR_XRGB(200,100,100);
const D3DCOLOR DXUT_PERFEVENTCOLOR2 = D3DCOLOR_XRGB(100,200,100);
const D3DCOLOR DXUT_PERFEVENTCOLOR3 = D3DCOLOR_XRGB(100,100,200);
//--------------------------------------------------------------------------------------
// The following macros provide a convenient way for your code to call the D3DPERF
// functions only when PROFILE is defined. If PROFILE is not defined (as for the final
// release version of a program), these macros evaluate to nothing, so no detailed event
// information is embedded in your shipping program. It is recommended that you create
// and use three build configurations for your projects:
// Debug (nonoptimized code, asserts active, PROFILE defined to assist debugging)
// Profile (optimized code, asserts disabled, PROFILE defined to assist optimization)
// Release (optimized code, asserts disabled, PROFILE not defined)
//--------------------------------------------------------------------------------------
#ifdef PROFILE
// PROFILE is defined, so these macros call the D3DPERF functions
#define DXUT_BeginPerfEvent( color, pstrMessage ) DXUT_Dynamic_D3DPERF_BeginEvent( color, pstrMessage )
#define DXUT_EndPerfEvent() DXUT_Dynamic_D3DPERF_EndEvent()
#define DXUT_SetPerfMarker( color, pstrMessage ) DXUT_Dynamic_D3DPERF_SetMarker( color, pstrMessage )
#else
// PROFILE is not defined, so these macros do nothing
#define DXUT_BeginPerfEvent( color, pstrMessage ) (__noop)
#define DXUT_EndPerfEvent() (__noop)
#define DXUT_SetPerfMarker( color, pstrMessage ) (__noop)
#endif
//--------------------------------------------------------------------------------------
// CDXUTPerfEventGenerator is a helper class that makes it easy to attach begin and end
// events to a block of code. Simply define a CDXUTPerfEventGenerator variable anywhere
// in a block of code, and the class's constructor will call DXUT_BeginPerfEvent when
// the block of code begins, and the class's destructor will call DXUT_EndPerfEvent when
// the block ends.
//--------------------------------------------------------------------------------------
class CDXUTPerfEventGenerator
{
public:
CDXUTPerfEventGenerator( D3DCOLOR color, LPCWSTR pstrMessage ) { DXUT_BeginPerfEvent( color, pstrMessage ); }
~CDXUTPerfEventGenerator( void ) { DXUT_EndPerfEvent(); }
};
//--------------------------------------------------------------------------------------
// Implementation of CGrowableArray
//--------------------------------------------------------------------------------------
// This version doesn't call ctor or dtor.
template< typename TYPE >
HRESULT CGrowableArray<TYPE>::SetSizeInternal( int nNewMaxSize )
{
if( nNewMaxSize < 0 )
{
assert( false );
return E_INVALIDARG;
}
if( nNewMaxSize == 0 )
{
// Shrink to 0 size & cleanup
if( m_pData )
{
free( m_pData );
m_pData = NULL;
}
m_nMaxSize = 0;
m_nSize = 0;
}
else if( m_pData == NULL || nNewMaxSize > m_nMaxSize )
{
// Grow array
int nGrowBy = ( m_nMaxSize == 0 ) ? 16 : m_nMaxSize;
nNewMaxSize = max( nNewMaxSize, m_nMaxSize + nGrowBy );
TYPE* pDataNew = (TYPE*) realloc( m_pData, nNewMaxSize * sizeof(TYPE) );
if( pDataNew == NULL )
return E_OUTOFMEMORY;
m_pData = pDataNew;
m_nMaxSize = nNewMaxSize;
}
return S_OK;
}
//--------------------------------------------------------------------------------------
template< typename TYPE >
HRESULT CGrowableArray<TYPE>::SetSize( int nNewMaxSize )
{
int nOldSize = m_nSize;
if( nOldSize > nNewMaxSize )
{
// Removing elements. Call dtor.
for( int i = nNewMaxSize; i < nOldSize; ++i )
m_pData[i].~TYPE();
}
// Adjust buffer. Note that there's no need to check for error
// since if it happens, nOldSize == nNewMaxSize will be true.)
HRESULT hr = SetSizeInternal( nNewMaxSize );
if( nOldSize < nNewMaxSize )
{
// Adding elements. Call ctor.
for( int i = nOldSize; i < nNewMaxSize; ++i )
::new (&m_pData[i]) TYPE;
}
return hr;
}
//--------------------------------------------------------------------------------------
template< typename TYPE >
HRESULT CGrowableArray<TYPE>::Add( const TYPE& value )
{
HRESULT hr;
if( FAILED( hr = SetSizeInternal( m_nSize + 1 ) ) )
return hr;
// Construct the new element
::new (&m_pData[m_nSize]) TYPE;
// Assign
m_pData[m_nSize] = value;
++m_nSize;
return S_OK;
}
//--------------------------------------------------------------------------------------
template< typename TYPE >
HRESULT CGrowableArray<TYPE>::Insert( int nIndex, const TYPE& value )
{
HRESULT hr;
// Validate index
if( nIndex < 0 ||
nIndex > m_nSize )
{
assert( false );
return E_INVALIDARG;
}
// Prepare the buffer
if( FAILED( hr = SetSizeInternal( m_nSize + 1 ) ) )
return hr;
// Shift the array
MoveMemory( &m_pData[nIndex+1], &m_pData[nIndex], sizeof(TYPE) * (m_nSize - nIndex) );
// Construct the new element
::new (&m_pData[nIndex]) TYPE;
// Set the value and increase the size
m_pData[nIndex] = value;
++m_nSize;
return S_OK;
}
//--------------------------------------------------------------------------------------
template< typename TYPE >
HRESULT CGrowableArray<TYPE>::SetAt( int nIndex, const TYPE& value )
{
// Validate arguments
if( nIndex < 0 ||
nIndex >= m_nSize )
{
assert( false );
return E_INVALIDARG;
}
m_pData[nIndex] = value;
return S_OK;
}
//--------------------------------------------------------------------------------------
// Searches for the specified value and returns the index of the first occurrence
// within the section of the data array that extends from iStart and contains the
// specified number of elements. Returns -1 if value is not found within the given
// section.
//--------------------------------------------------------------------------------------
template< typename TYPE >
int CGrowableArray<TYPE>::IndexOf( const TYPE& value, int iStart, int nNumElements )
{
// Validate arguments
if( iStart < 0 ||
iStart >= m_nSize ||
nNumElements < 0 ||
iStart + nNumElements > m_nSize )
{
assert( false );
return -1;
}
// Search
for( int i = iStart; i < (iStart + nNumElements); i++ )
{
if( value == m_pData[i] )
return i;
}
// Not found
return -1;
}
//--------------------------------------------------------------------------------------
// Searches for the specified value and returns the index of the last occurrence
// within the section of the data array that contains the specified number of elements
// and ends at iEnd. Returns -1 if value is not found within the given section.
//--------------------------------------------------------------------------------------
template< typename TYPE >
int CGrowableArray<TYPE>::LastIndexOf( const TYPE& value, int iEnd, int nNumElements )
{
// Validate arguments
if( iEnd < 0 ||
iEnd >= m_nSize ||
nNumElements < 0 ||
iEnd - nNumElements < 0 )
{
assert( false );
return -1;
}
// Search
for( int i = iEnd; i > (iEnd - nNumElements); i-- )
{
if( value == m_pData[i] )
return i;
}
// Not found
return -1;
}
//--------------------------------------------------------------------------------------
template< typename TYPE >
HRESULT CGrowableArray<TYPE>::Remove( int nIndex )
{
if( nIndex < 0 ||
nIndex >= m_nSize )
{
assert( false );
return E_INVALIDARG;
}
// Destruct the element to be removed
m_pData[nIndex].~TYPE();
// Compact the array and decrease the size
MoveMemory( &m_pData[nIndex], &m_pData[nIndex+1], sizeof(TYPE) * (m_nSize - (nIndex+1)) );
--m_nSize;
return S_OK;
}
#endif
Loaded 100 of 20588 files, more files were not shown because too many files have changed in this diff. Show more