12 Replies - 2155 Views - Last Post: 23 June 2013 - 04:41 PM Rate Topic: -----

#1 Magn0733  Icon User is offline

  • New D.I.C Head

Reputation: 2
  • View blog
  • Posts: 48
  • Joined: 04-April 13

VS-2012 won't compile when i add a .hlsl file?

Posted 04 June 2013 - 06:11 PM

Okay. So my problem is, that my program runs just fine in Visual Studio 2012 (By the way, i'm using DirectX)
And when i started up DirX, and made a render scene i wanted to actally render something on that screne.
Now the problem comes when i add a shaders.hlsl file (Just following along on Directxtutorials.com) to make it possible for me to render.
It sais:
Error X3501: 'main': entrypoint not found
???
Why can't it find my entrypoint the moment i add that hlsl file? :)
Please help

And i don't know if i'm doing something wrong in adding the file.
but in Vs 2010 i just created a file with the name shaders.hlsl and pressed enter? (still with the cpp template pressed)
And that did work just fine
I can't find any template for hlsl in VS2012 so i assumed that i just had to do the same and add .hlsl at the end of the name?
But maybe not?

Please help.
Thanks in advance! :)

Is This A Good Question/Topic? 0
  • +

Replies To: VS-2012 won't compile when i add a .hlsl file?

#2 anonymous26  Icon User is offline

  • D.I.C Lover

Reputation: 0
  • View blog
  • Posts: 3,638
  • Joined: 26-November 10

Re: VS-2012 won't compile when i add a .hlsl file?

Posted 05 June 2013 - 03:03 AM

Have you researched what the error X3501 means? You need to do that.
Was This Post Helpful? -1
  • +
  • -

#3 BBeck  Icon User is offline

  • Here to help.
  • member icon


Reputation: 570
  • View blog
  • Posts: 1,270
  • Joined: 24-April 12

Re: VS-2012 won't compile when i add a .hlsl file?

Posted 05 June 2013 - 06:45 AM

Honestly, I have no idea what you've got going on there. But, I might take a stab at it.

Did you overwrite your main .cpp file with another file? As you may know, there has to be a "main" function for the program to start. And (although I've never used anything higher than VS2010 and haven't coded in C++ for awhile) there should be a place in the project settings to define which file is the primary file that starts the whole thing off. And the compiler should look for the "main" function in that file to begin compiling and as the starting point for the program.

If I'm misunderstanding what's going on forgive me. But if that is what's going on I would say don't use High Level Shader Language. High Level Shader Language is an advanced game/graphics topic that shouldn't be approached until you feel pretty confident at the intermediate level of game programming. And probably the intermediate level of 3D game programming as I'm not sure anyone really uses HLSL in 2D much except for advanced special effects... maybe.

I know a lot of tutorial stuff gets into shading really early. I think that's kind of a mistake unless there is a tremendous amount of hand holding going on with it, since it really is a completely separate subject one must learn on top of game programming and it gets really deep into vector math really quick, which a lot of aspiring game programmers may not be well versed in.

XNA with C# provides one of the easiest paths into HLSL I think. If you want to see a bare bones HLSL shader file I can produce one of those. Outside of that, you mostly have to know how to call the shader within the program. It's all the stuff you would normally do without the custom shader and then plus the call to the custom shader. If you have the option of built in shaders, use those until you are very familiar with using them before trying to write custom shaders.

Anyway, maybe that's not what you have going on at all. If not, I apologize for any assumptions.
Was This Post Helpful? 2
  • +
  • -

#4 stayscrisp  Icon User is offline

  • フカユ
  • member icon

Reputation: 998
  • View blog
  • Posts: 4,173
  • Joined: 14-February 08

Re: VS-2012 won't compile when i add a .hlsl file?

Posted 05 June 2013 - 07:32 AM

You can set the entry point for an HLSL file in its properties

HLSL Compiler | Entrypoint Name
Was This Post Helpful? 1
  • +
  • -

#5 Magn0733  Icon User is offline

  • New D.I.C Head

Reputation: 2
  • View blog
  • Posts: 48
  • Joined: 04-April 13

Re: VS-2012 won't compile when i add a .hlsl file?

Posted 05 June 2013 - 10:04 AM

View PostBBeck, on 05 June 2013 - 06:45 AM, said:

Honestly, I have no idea what you've got going on there. But, I might take a stab at it.

Did you overwrite your main .cpp file with another file? As you may know, there has to be a "main" function for the program to start. And (although I've never used anything higher than VS2010 and haven't coded in C++ for awhile) there should be a place in the project settings to define which file is the primary file that starts the whole thing off. And the compiler should look for the "main" function in that file to begin compiling and as the starting point for the program.

If I'm misunderstanding what's going on forgive me. But if that is what's going on I would say don't use High Level Shader Language. High Level Shader Language is an advanced game/graphics topic that shouldn't be approached until you feel pretty confident at the intermediate level of game programming. And probably the intermediate level of 3D game programming as I'm not sure anyone really uses HLSL in 2D much except for advanced special effects... maybe.

I know a lot of tutorial stuff gets into shading really early. I think that's kind of a mistake unless there is a tremendous amount of hand holding going on with it, since it really is a completely separate subject one must learn on top of game programming and it gets really deep into vector math really quick, which a lot of aspiring game programmers may not be well versed in.

XNA with C# provides one of the easiest paths into HLSL I think. If you want to see a bare bones HLSL shader file I can produce one of those. Outside of that, you mostly have to know how to call the shader within the program. It's all the stuff you would normally do without the custom shader and then plus the call to the custom shader. If you have the option of built in shaders, use those until you are very familiar with using them before trying to write custom shaders.

Anyway, maybe that's not what you have going on at all. If not, I apologize for any assumptions.


You seem to be the closest to what i think is the problem.
I've had some experiance in hlsl, and WinApp for some time now so things are going just fine.
I've already made a few programms that ran just fine, displaying triangles and lit cubes etc.
But the problem started when i switched to VS2012?
So i guess i'll have to take a look at that file setting somehow :)

Thanks for the help.
Was This Post Helpful? 0
  • +
  • -

#6 BBeck  Icon User is offline

  • Here to help.
  • member icon


Reputation: 570
  • View blog
  • Posts: 1,270
  • Joined: 24-April 12

Re: VS-2012 won't compile when i add a .hlsl file?

Posted 05 June 2013 - 11:40 AM

It sounds like what you're needing is a tutorial on how to get C++ configured for DirectX and then to use a HLSL shader with that.

Take a look at the website below. I think it might help.

I basically did a Google search on "DirectX C++ HLSL tutorial" and found this. But it looks like it might explain the basics of how to get things configured and setup. I'm glad I looked it up; I think there might be some stuff I can use in here.


http://www.rastertek.com/tutindex.html
Was This Post Helpful? 0
  • +
  • -

#7 BBeck  Icon User is offline

  • Here to help.
  • member icon


Reputation: 570
  • View blog
  • Posts: 1,270
  • Joined: 24-April 12

Re: VS-2012 won't compile when i add a .hlsl file?

Posted 05 June 2013 - 12:29 PM

I might also point out that if you create an empty project in VS2010 that it creates a truely empty project. This is, after all, C++ and so it will let you shoot yourself in the foot.

If you create a standard Win32 project it creates all of the barebones code you will need in 98% of every Windows app you create in C++ for you.

All that code does is create a window with a menu. It creates a bunch of files for this barebones example: there's two icons, a resource file, 4 header files, and the stdafx.cpp file in addition to your main .cpp file. The main .cpp file has the following code (other than the resource files used to compile the menu this is 99% of the code for the program right here):

// BareBonesWinProject.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "BareBonesWinProject.h"

#define MAX_LOADSTRING 100

// Global Variables:
HINSTANCE hInst;								// current instance
TCHAR szTitle[MAX_LOADSTRING];					// The title bar text
TCHAR szWindowClass[MAX_LOADSTRING];			// the main window class name

// Forward declarations of functions included in this code module:
ATOM				MyRegisterClass(HINSTANCE hInstance);
BOOL				InitInstance(HINSTANCE, int);
LRESULT CALLBACK	WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK	About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
	UNREFERENCED_PARAMETER(hPrevInstance);
	UNREFERENCED_PARAMETER(lpCmdLine);

 	// TODO: Place code here.
	MSG msg;
	HACCEL hAccelTable;

	// Initialize global strings
	LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
	LoadString(hInstance, IDC_BAREBONESWINPROJECT, szWindowClass, MAX_LOADSTRING);
	MyRegisterClass(hInstance);

	// Perform application initialization:
	if (!InitInstance (hInstance, nCmdShow))
	{
		return FALSE;
	}

	hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_BAREBONESWINPROJECT));

	// Main message loop:
	while (GetMessage(&msg, NULL, 0, 0))
	{
		if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
		{
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
	}

	return (int) msg.wParam;
}



//
//  FUNCTION: MyRegisterClass()
//
//  PURPOSE: Registers the window class.
//
//  COMMENTS:
//
//    This function and its usage are only necessary if you want this code
//    to be compatible with Win32 systems prior to the 'RegisterClassEx'
//    function that was added to Windows 95. It is important to call this function
//    so that the application will get 'well formed' small icons associated
//    with it.
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
	WNDCLASSEX wcex;

	wcex.cbSize = sizeof(WNDCLASSEX);

	wcex.style			= CS_HREDRAW | CS_VREDRAW;
	wcex.lpfnWndProc	= WndProc;
	wcex.cbClsExtra		= 0;
	wcex.cbWndExtra		= 0;
	wcex.hInstance		= hInstance;
	wcex.hIcon			= LoadIcon(hInstance, MAKEINTRESOURCE(IDI_BAREBONESWINPROJECT));
	wcex.hCursor		= LoadCursor(NULL, IDC_ARROW);
	wcex.hbrBackground	= (HBRUSH)(COLOR_WINDOW+1);
	wcex.lpszMenuName	= MAKEINTRESOURCE(IDC_BAREBONESWINPROJECT);
	wcex.lpszClassName	= szWindowClass;
	wcex.hIconSm		= LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

	return RegisterClassEx(&wcex);
}

//
//   FUNCTION: InitInstance(HINSTANCE, int)
//
//   PURPOSE: Saves instance handle and creates main window
//
//   COMMENTS:
//
//        In this function, we save the instance handle in a global variable and
//        create and display the main program window.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;

   hInst = hInstance; // Store instance handle in our global variable

   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

   if (!hWnd)
   {
      return FALSE;
   }

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   return TRUE;
}

//
//  FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  PURPOSE:  Processes messages for the main window.
//
//  WM_COMMAND	- process the application menu
//  WM_PAINT	- Paint the main window
//  WM_DESTROY	- post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	int wmId, wmEvent;
	PAINTSTRUCT ps;
	HDC hdc;

	switch (message)
	{
	case WM_COMMAND:
		wmId    = LOWORD(wParam);
		wmEvent = HIWORD(wParam);
		// Parse the menu selections:
		switch (wmId)
		{
		case IDM_about:
			DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
			break;
		case IDM_EXIT:
			DestroyWindow(hWnd);
			break;
		default:
			return DefWindowProc(hWnd, message, wParam, lParam);
		}
		break;
	case WM_PAINT:
		hdc = BeginPaint(hWnd, &ps);
		// TODO: Add any drawing code here...
		EndPaint(hWnd, &ps);
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	default:
		return DefWindowProc(hWnd, message, wParam, lParam);
	}
	return 0;
}

// Message handler for about box.
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	UNREFERENCED_PARAMETER(lParam);
	switch (message)
	{
	case WM_INITDIALOG:
		return (INT_PTR)TRUE;

	case WM_COMMAND:
		if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
		{
			EndDialog(hDlg, LOWORD(wParam));
			return (INT_PTR)TRUE;
		}
		break;
	}
	return (INT_PTR)FALSE;
}




The part of the code below is likely the code its looking for:
int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)



I believe that's the entry point for the code where the program begins.

It's been so long since I've done C++ that I'm forgetting even what I used to know. If I recall correctly, all of the files in your project will compile down to .obj files. Then the linker will link together the .obj files in your project into a .exe file. But I believe the linker looks for that _tWinMain to determine where the code begins and I think it will search all files for it. _tWinMain is defined as wWinMain, which is probably what it is "really" looking for.

Even in the OpenGL example from the website link I posted above, they have the same thing:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR pScmdline, int iCmdshow)



Although in that example, he has you create an empty project and then create every file yourself by copying code into the blank files. So, he's really kind of doing it from scratch.

I think the error your getting is because the compiler assumes you're not even in Windows. When it doesn't find that entry point, I think it assumes its a console app and looks for the "main" function instead of WinMain.

The tutorials in the link above will probably get you pointed in the right direction. I just ran through the first (basic framework) OpenGL tutorial and it compiled nicely in VS2010. I had to right click on "Source Files" and add a blank .cpp file for each section of code and copy and paste it. And I had to right click on "Header Files" and add a blank .h file for each section of code and copy and paste the header code.

You're right that there's no template for a .hlsl file. I would probably create most of my program and then add another .cpp file, either in my own custom folder or one of the existing ones. Then I would rename the blank file .hlsl or .fx or whatever and then start writing the shader code. I'm not sure, but you probably have to go through some steps to actually compile the .hlsl code. VS probably doesn't know how to do that (unless they added it in 2010). So, you may have to compile that into an .obj file or something and then manually link it in. I've only done HLSL in XNA. So, I'm not sure how to bring it in to a C++ program. But I'm sure that code in that link I provided will show you what you need to do. Good luck!

This post has been edited by BBeck: 05 June 2013 - 12:42 PM

Was This Post Helpful? 1
  • +
  • -

#8 BBeck  Icon User is offline

  • Here to help.
  • member icon


Reputation: 570
  • View blog
  • Posts: 1,270
  • Joined: 24-April 12

Re: VS-2012 won't compile when i add a .hlsl file?

Posted 05 June 2013 - 01:05 PM

Incidently, here's an example of HLSL code from one of the projects I have on my computer. This file has a .FX extension for whatever that's worth but its HLSL code. This is pretty close to a "barebones" shader file. It's passing the vertex position to the pixel shader to use for the UV mapping, if I recall correctly.


float4x4 World;
float4x4 View;
float4x4 Projection;

texture BasicTexture;

sampler BasicTextureSampler = sampler_state {
	texture = <BasicTexture>;
	MinFilter = Anisotropic;
	MagFilter = Anisotropic;
	MipFilter = Linear;
	AddressU = Wrap;
	AddressV = Wrap;
};

bool TextureEnabled = false;

float3 DiffuseColor = float3(1, 1, 1);
float3 AmbientColor = float3(.15, .15, .15);

struct VertexShaderInput
{
    float4 Position : POSITION0;
	float2 UV : TEXCOORD0;
};

struct VertexShaderOutput
{
    float4 Position : POSITION0;
	float2 UV : TEXCOORD0;
};

VertexShaderOutput VertexShaderFunction(VertexShaderInput input)
{
    VertexShaderOutput output;
    
    float4 worldPosition = mul(input.Position, World);
    float4x4 viewProjection = mul(View, Projection);
    
    output.Position = mul(worldPosition, viewProjection);

	output.UV = input.UV;

    return output;
}

float4 PixelShaderFunction(VertexShaderOutput input) : COLOR0
{
	float3 output = DiffuseColor + AmbientColor;

	if (TextureEnabled)
		output *= tex2D(BasicTextureSampler, input.UV);

    return float4(output, 1);
}

technique Technique1
{
    pass Pass1
    {
        VertexShader = compile vs_1_1 VertexShaderFunction();
        PixelShader = compile ps_2_0 PixelShaderFunction();
    }
}




I believe the code starts here:

technique Technique1
{
    pass Pass1
    {
        VertexShader = compile vs_1_1 VertexShaderFunction();
        PixelShader = compile ps_2_0 PixelShaderFunction();
    }
}



And then I believe the "VertexShader = compile vs_1_1 VertexShaderFunction();" basically calls the VertexShaderFunction where the code really begins.

I'm no expert in HLSL. I'm barely to the point where I'm starting to be able to write my own shaders but I'm mostly still piecing shaders together by combining a handful of code examples that I find. This code expects a World, View, and Projection matrix as well as a texture with UV coordinates in the vertices.

This post has been edited by BBeck: 05 June 2013 - 01:09 PM

Was This Post Helpful? 1
  • +
  • -

#9 stayscrisp  Icon User is offline

  • フカユ
  • member icon

Reputation: 998
  • View blog
  • Posts: 4,173
  • Joined: 14-February 08

Re: VS-2012 won't compile when i add a .hlsl file?

Posted 06 June 2013 - 05:27 AM

View Poststayscrisp, on 05 June 2013 - 03:32 PM, said:

You can set the entry point for an HLSL file in its properties

HLSL Compiler | Entrypoint Name


Did you try this?

It's clear that your shader file thinks that your entry point is main when it should be WinMain for a Win32 application.
Was This Post Helpful? 1
  • +
  • -

#10 Magn0733  Icon User is offline

  • New D.I.C Head

Reputation: 2
  • View blog
  • Posts: 48
  • Joined: 04-April 13

Re: VS-2012 won't compile when i add a .hlsl file?

Posted 09 June 2013 - 04:09 AM

View Poststayscrisp, on 06 June 2013 - 05:27 AM, said:

View Poststayscrisp, on 05 June 2013 - 03:32 PM, said:

You can set the entry point for an HLSL file in its properties

HLSL Compiler | Entrypoint Name


Did you try this?

It's clear that your shader file thinks that your entry point is main when it should be WinMain for a Win32 application.


Sorry for not replying for some time, my computer died and had to get a replacement computer :(

Anyways. Yes i did try to do this. Or atleast i tried to search for how to fix it and i found out that i had to set the hlsl files settings :) So i did this and removed the entry point for the hlsl file (thereby making it a compile from file, file ).

I ran the code and the programm started up as it should :) displaying a blue dirx screne :)
the only problem was that i think that it didn't compile my shader because it should (insted of just an blue scene) have displayed a lit cube?

Anyways i guess i'll look more into the problem once i get my main computer repaired.

So thanks for your help guys! :)
Was This Post Helpful? 0
  • +
  • -

#11 BBeck  Icon User is offline

  • Here to help.
  • member icon


Reputation: 570
  • View blog
  • Posts: 1,270
  • Joined: 24-April 12

Re: VS-2012 won't compile when i add a .hlsl file?

Posted 16 June 2013 - 10:17 AM

I just had a problem like the one I described above, and so I thought I would post my own solution.

However, I think the problem in this post is with "FXC"? and compiling the shader rather than finding the entry point into the code.

My problem was that I created an empty solution/project and then brought in source files. I created it as a console app instead of a windows app even though I am building a Windows program. (This was for an OpenGL tutorial where I'm copying in source code.)

VS seems to determine the entry point into the code based on "Project -> Properties -> Configuration Properties -> Linker -> System -> SubSystem" settings. I had to change that from Console to Windows to get it to find my Windows "main" function. The linker was giving me a basically meaningless error message until I did that. Google is awesome. That was all I had to do to get it to compile.

Your problem, however, sounds like it may be that VS is trying to compile the HLSL code and failing. I came across something about turning FXC off when googling your error message.

Incidentally, it looks like GLSL uses the keyword "main" to determine the entry point in a vertex shader. I've never had a "main" in any shader I've written in HLSL (although mine were all done in XNA and so that may be a bit different, except that I've also played with them in NVidia's shader tool and I didn't have to rewrite my shaders to get them to work outside of XNA there.) Is it possible that its getting confused and looking for GLSL code?

GLSL entry point:
void main(void)


This post has been edited by BBeck: 16 June 2013 - 10:25 AM

Was This Post Helpful? 0
  • +
  • -

#12 stayscrisp  Icon User is offline

  • フカユ
  • member icon

Reputation: 998
  • View blog
  • Posts: 4,173
  • Joined: 14-February 08

Re: VS-2012 won't compile when i add a .hlsl file?

Posted 17 June 2013 - 01:25 AM

View PostBBeck, on 16 June 2013 - 06:17 PM, said:

based on "Project -> Properties -> Configuration Properties -> Linker -> System -> SubSystem" settings. I had to change that from Console to Windows to get it to find my Windows "main" function. The linker was giving me a basically meaningless error message until I did that. Google is awesome. That was all I had to do to get it to compile.


When making a DX application you must always use Windows as subsystem as you are not creating a console application. Setting the subsystem will also set the entry point. If following a tutorial this should be explained.
Was This Post Helpful? 0
  • +
  • -

#13 BBeck  Icon User is offline

  • Here to help.
  • member icon


Reputation: 570
  • View blog
  • Posts: 1,270
  • Joined: 24-April 12

Re: VS-2012 won't compile when i add a .hlsl file?

Posted 23 June 2013 - 04:41 PM

I just found your problem. :gunsmilie:/>

I almost hate to resurrect this semi-old post except that I'm about 98% certain that I just found your exact problem.

I'm kind of doing the same thing you're doing; I'm trying to figure out DX11 in VS2012. I had a working project and then I broke it and got the exact same error message:

Error 1 error X3501: 'main': entrypoint not found C:\Trash\BeginningDirectX11Code\CD\Chapter3\Texture2D\Texture2D\FXC Texture2D

Since I know how I broke it, I'm pretty confident in saying I know how t to fix it.

The .fx (HLSL) file was not included in the project; it wasn't in solution explorer at all. Apparently, the code just looks in the local directory for it even though its not part of the project because its called by its specific file name when the shader is compiled in code.

The code worked great... until I added the .fx file into the project in solution explorer. That's how I got the error message.

Apparently, when its included as part of the project it tries to compile it or something. But that's not the way it is intended to be used in the code. In the code it is used by this call:

result = D3DX11CompileFromFile( filePath, 0, 0, entry, shaderModel,
        shaderFlags, 0, 0, buffer, &errorBuffer, 0 );



In the code you feed the file into filePath there and it compiles it at that point (actually there were two times this is called, once for the Vertex Shader and once for the Pixel shader. The entry parameter here expects a string with the name of your "main" function for your shader (vertex or pixel). And that's how it knows where to start executing.

If its added to the project it seems to want to compile it, but isn't being told which function is the main function (not sure how to do that but the point here is you probably don't even want to).

So, by simply excluding the .fx file from the project, it went back to working and the error went away.

I was really surprised that simply including it into the project would break it, as I was thinking it wasn't really processing files that were included but was just giving me a convenient way of viewing them. I included it in the project because I wanted to view the .fx code, but that just broke the program.

In order to have it in the project without VS attempting to compile it at the wrong time, I went into the properties of the .fx file in Solution Explorer and set the "Item Type" to "Does not participate in build". Et Voila! The error went away!

(I was a bit off base in my earlier posts thinking that it was getting confused about the entry point into the overall program and thinking that it was a console app when it wasn't. However, it looks like it truly was getting confused about where the shader code began.)

This post has been edited by BBeck: 23 June 2013 - 04:46 PM

Was This Post Helpful? 0
  • +
  • -

Page 1 of 1