Working create new shader
This commit is contained in:
@@ -528,6 +528,10 @@ public class ResourceManager extends Proxy implements IResourceRetriever {
|
||||
return shaderPrograms.get(shaderName);
|
||||
}
|
||||
|
||||
public void addShaderProgram(String name, ShaderProgram shaderProgram) {
|
||||
shaderPrograms.put(name, shaderProgram);
|
||||
}
|
||||
|
||||
public void removeShaderProgram(String shaderName) {
|
||||
shaderPrograms.remove(shaderName);
|
||||
}
|
||||
|
||||
@@ -20,6 +20,8 @@ public class ShaderManagerDialog extends H2DDialog {
|
||||
private final SimpleListAdapter<String> shadersListAdapter;
|
||||
private final Array<String> shaderItems = new Array<>();
|
||||
|
||||
private final VisSelectBox<String> newShaderTypeSelectBox;
|
||||
|
||||
public static final String prefix = "games.rednblack.editor.view.ui.dialog.ShaderManagerDialog";
|
||||
|
||||
public static final String EDIT_FRAGMENT_SHADER = prefix + ".EDIT_FRAGMENT_SHADER";
|
||||
@@ -27,6 +29,8 @@ public class ShaderManagerDialog extends H2DDialog {
|
||||
public static final String EDIT_FRAGMENT_SHADER_DONE = prefix + ".EDIT_FRAGMENT_SHADER_DONE";
|
||||
public static final String EDIT_VERTEX_SHADER_DONE = prefix + ".EDIT_VERTEX_SHADER_DONE";
|
||||
|
||||
public static final String CREATE_NEW_SHADER = prefix + ".CREATE_NEW_SHADER";
|
||||
|
||||
public ShaderManagerDialog() {
|
||||
super("Shader Manager");
|
||||
|
||||
@@ -43,27 +47,29 @@ public class ShaderManagerDialog extends H2DDialog {
|
||||
getContentTable().add(shaderList.getMainTable()).uniformX().grow();
|
||||
|
||||
VisTextField newShaderName = StandardWidgetsFactory.createTextField();
|
||||
newShaderName.setMessageText("Create New Shader");
|
||||
newShaderName.setMessageText("New Shader Name");
|
||||
getButtonsTable().add(newShaderName).growX();
|
||||
|
||||
VisTextButton newShaderButton = StandardWidgetsFactory.createTextButton("Simple");
|
||||
VisTextButton newShaderButton = StandardWidgetsFactory.createTextButton("Create");
|
||||
newShaderButton.addListener(new ClickListener() {
|
||||
@Override
|
||||
public void clicked(InputEvent event, float x, float y) {
|
||||
if (newShaderName.getText().isEmpty()) return;
|
||||
|
||||
Object[] payload = new Object[2];
|
||||
payload[0] = newShaderName.getText();
|
||||
payload[1] = newShaderTypeSelectBox.getSelectedIndex();
|
||||
|
||||
HyperLap2DFacade.getInstance().sendNotification(CREATE_NEW_SHADER, payload);
|
||||
}
|
||||
});
|
||||
|
||||
VisTextButton newScreenReadingShaderButton = StandardWidgetsFactory.createTextButton("Screen Reading");
|
||||
newShaderButton.addListener(new ClickListener() {
|
||||
@Override
|
||||
public void clicked(InputEvent event, float x, float y) {
|
||||
|
||||
}
|
||||
});
|
||||
String[] data = {"Simple", "Simple Array", "Screen Reading", "Screen Reading Array"};
|
||||
newShaderTypeSelectBox = StandardWidgetsFactory.createSelectBox(String.class);
|
||||
newShaderTypeSelectBox.setItems(data);
|
||||
|
||||
getButtonsTable().add(newShaderTypeSelectBox);
|
||||
getButtonsTable().add(newShaderButton).pad(2);
|
||||
getButtonsTable().add(newScreenReadingShaderButton).pad(2);
|
||||
getCell(getButtonsTable()).growX();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,14 +1,18 @@
|
||||
package games.rednblack.editor.view.ui.dialog;
|
||||
|
||||
import com.badlogic.gdx.files.FileHandle;
|
||||
import games.rednblack.editor.HyperLap2DFacade;
|
||||
import games.rednblack.editor.code.syntax.GLSLSyntax;
|
||||
import games.rednblack.editor.controller.commands.resource.DeleteShaderCommand;
|
||||
import games.rednblack.editor.proxy.ProjectManager;
|
||||
import games.rednblack.editor.proxy.ResourceManager;
|
||||
import games.rednblack.editor.renderer.utils.DefaultShaders;
|
||||
import games.rednblack.editor.renderer.utils.ShaderCompiler;
|
||||
import games.rednblack.editor.view.menu.ResourcesMenu;
|
||||
import games.rednblack.editor.view.stage.Sandbox;
|
||||
import games.rednblack.editor.view.stage.UIStage;
|
||||
import games.rednblack.h2d.common.MsgAPI;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.puremvc.java.interfaces.INotification;
|
||||
import org.puremvc.java.patterns.mediator.Mediator;
|
||||
|
||||
@@ -43,6 +47,7 @@ public class ShaderManagerDialogMediator extends Mediator<ShaderManagerDialog> {
|
||||
ShaderManagerDialog.EDIT_VERTEX_SHADER_DONE,
|
||||
ShaderManagerDialog.EDIT_FRAGMENT_SHADER,
|
||||
ShaderManagerDialog.EDIT_VERTEX_SHADER,
|
||||
ShaderManagerDialog.CREATE_NEW_SHADER,
|
||||
DeleteShaderCommand.DONE
|
||||
};
|
||||
}
|
||||
@@ -103,6 +108,48 @@ public class ShaderManagerDialogMediator extends Mediator<ShaderManagerDialog> {
|
||||
e.printStackTrace();
|
||||
}
|
||||
break;
|
||||
case ShaderManagerDialog.CREATE_NEW_SHADER:
|
||||
payload = notification.getBody();
|
||||
createNewShader((String) payload[0], (int) payload[1]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void createNewShader(String name, int type) {
|
||||
String vertex = null;
|
||||
String fragment = null;
|
||||
|
||||
switch (type) {
|
||||
case 0:
|
||||
vertex = DefaultShaders.DEFAULT_VERTEX_SHADER;
|
||||
fragment = DefaultShaders.DEFAULT_FRAGMENT_SHADER;
|
||||
break;
|
||||
case 1:
|
||||
vertex = DefaultShaders.DEFAULT_ARRAY_VERTEX_SHADER;
|
||||
fragment = DefaultShaders.DEFAULT_ARRAY_FRAGMENT_SHADER;
|
||||
break;
|
||||
case 2:
|
||||
case 3:
|
||||
break;
|
||||
}
|
||||
|
||||
if (vertex == null || fragment == null) return;
|
||||
|
||||
ProjectManager projectManager = facade.retrieveProxy(ProjectManager.NAME);
|
||||
ResourceManager rm = facade.retrieveProxy(ResourceManager.NAME);
|
||||
|
||||
FileHandle vert = new FileHandle(projectManager.getCurrentProjectPath() + File.separator
|
||||
+ ProjectManager.SHADER_DIR_PATH + File.separator + name + ".vert");
|
||||
FileHandle frag = new FileHandle(projectManager.getCurrentProjectPath() + File.separator
|
||||
+ ProjectManager.SHADER_DIR_PATH + File.separator + name + ".frag");
|
||||
|
||||
try {
|
||||
FileUtils.writeStringToFile(vert.file(), vertex, "utf-8");
|
||||
FileUtils.writeStringToFile(frag.file(), fragment, "utf-8");
|
||||
rm.addShaderProgram(name, ShaderCompiler.compileShader(vertex, fragment));
|
||||
viewComponent.updateShaderList(rm.getShaders().keySet());
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user