#!amber
# Copyright 2019 The Amber Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

SHADER vertex vtex_shader GLSL
#version 430
layout(location = 0) in vec3 position;
void main() {
  gl_Position = vec4(position, 1.0);
}
END

SHADER fragment frag_shader GLSL
#version 430
layout(location = 0) out vec4 final_color;
void main() {
  final_color = vec4(1.0, 0.0, 0.0, 1.0);
}
END

BUFFER position_buf DATA_TYPE vec3<float> DATA
-1  1 0
-1 -1 0
 1  1 0
 1 -1 0
-1 -1 0
 1  1 0
END

BUFFER framebuffer FORMAT B8G8R8A8_UNORM

PIPELINE graphics pipeline
  ATTACH vtex_shader
  ATTACH frag_shader

  VERTEX_DATA position_buf LOCATION 0
  FRAMEBUFFER_SIZE 250 250
  BIND BUFFER framebuffer AS color LOCATION 0

END

RUN pipeline DRAW_ARRAY AS TRIANGLE_LIST START_IDX 0 COUNT 6
EXPECT framebuffer IDX 0 0 SIZE 250 250 EQ_RGBA 255 0 0 255
